{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "922f1434",
   "metadata": {},
   "source": [
    "# 格式设置\n",
    "1. 字符串-列表\n",
    "'{:$>m,.nf}'.format(list)\n",
    "2. 字典\n",
    "'{key}'.format_map(dict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "ecee5c82",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cecil's phone number is: 3258\n"
     ]
    }
   ],
   "source": [
    "phonebook = {'Beth':'9012','Alice':'2341','Cecil':'3258'}\n",
    "print(\"Cecil's phone number is: {Cecil}\".format_map(phonebook))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "025ebd63",
   "metadata": {},
   "source": [
    "# 字符串操作\n",
    "## string\n",
    "1. center \n",
    "2. find\n",
    "3. join\n",
    "4. split\n",
    "5. lower\n",
    "6. title\n",
    "7. islower istitle isupper translate capitalize casefold swapcase upper\n",
    "8. strip lstrip rstrip\n",
    "9. startswith endswith"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "e98afb92",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "*******************this is one word that needs to be centered*******************\n"
     ]
    }
   ],
   "source": [
    "# center\n",
    "print('this is one word that needs to be centered'.center(80,'*'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "50dcb4b4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "34.00\n"
     ]
    }
   ],
   "source": [
    "# find\n",
    "print(\"{:0<5.2f}\".format('this is one word that needs to be find'.find('find')))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "eda4ea77",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1+2+3+4+5\n",
      "/usr/bin/env\n",
      "C:\\usr\\bin\\env\n"
     ]
    }
   ],
   "source": [
    "# join\n",
    "seq = ['1','2','3','4','5']\n",
    "car = '+'\n",
    "print(car.join(seq))\n",
    "\n",
    "p = '','usr','bin','env'\n",
    "print('/'.join(p))\n",
    "print('C:'+'\\\\'.join(p))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "cbc69e00",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['1', '2', '3', '4', '5']\n",
      "<class 'list'>\n"
     ]
    }
   ],
   "source": [
    "# split\n",
    "print('1+2+3+4+5'.split('+'))\n",
    "print(type('1+2+3+4+5'.split('+')))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "d901d04f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "all uppper case!\n",
      "find it!\n",
      "All Uppper Case!\n"
     ]
    }
   ],
   "source": [
    "# lower\n",
    "print('ALL UPPPER CASE!'.lower())\n",
    "if 'case' in 'ALL UPPER CASE'.lower(): \n",
    "    print('find it!') \n",
    "else: print('no!')\n",
    "\n",
    "# title\n",
    "print('ALL UPPPER CASE!'.title())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "10719e42",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "theez eez a test\n"
     ]
    }
   ],
   "source": [
    "# replace\n",
    "print('this is a test'.replace('is','eez'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "b071b672",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "this is a sentence with dollar signs!\n"
     ]
    }
   ],
   "source": [
    "# strip\n",
    "print('$$$this is a sentence with dollar signs!$$$'.strip('$$$'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "2f641528",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{99: 107, 115: 122}\n",
      "this is an incredible test\n",
      "thiz iz an inkredible tezt\n"
     ]
    }
   ],
   "source": [
    "# translate\n",
    "# first make translation table\n",
    "table = str.maketrans('cs','kz')\n",
    "# next invoke translate method\n",
    "sen = 'this is an incredible test'\n",
    "print(table)\n",
    "print(sen)\n",
    "print(sen.translate(table))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "dea949b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# isalnum isalpha isdecimal isdigit isidentifier islower isnumeric isprintable isspace istitle isupper"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f210068a",
   "metadata": {},
   "source": [
    "# 字典"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "25cfd48d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'name': 'mark', 'age': 12}"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dics = [('name',\"mark\"),('age',12)]\n",
    "dicts = dict(dics)\n",
    "dicts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "c46fbd7d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'name': 'mark', 'age': 22}"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dicts = dict(name='mark', age=22)\n",
    "dicts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "b9262b87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'name': 'mark', 'age': 32}"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dicts = {'name':'mark','age':32}\n",
    "dicts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "444f9a73",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " None,\n",
       " 'mark']"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dicts = {}\n",
    "dicts[42] = 'mark'\n",
    "dicts\n",
    "\n",
    "lists = [None] * 43\n",
    "lists[42] = 'mark'\n",
    "lists"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "037e8f46",
   "metadata": {},
   "source": [
    "## 深浅复制"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "07284665",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'foo': 'a', 'bar': 'b', 'tar': ['foo', 'bar', 'tar']}\n",
      "{'bar': 'b', 'tar': ['foo', 'bar', 'tar']}\n",
      "====================\n",
      "{'foo': 'a', 'bar': 'b', 'tar': ['foo', 'tar']}\n",
      "{'foo': 'a', 'bar': 'b', 'tar': ['foo', 'tar']}\n"
     ]
    }
   ],
   "source": [
    "# 浅复制： 如果是基本类型或不可变类型【元组、字符串】，直接复制；如果是引用类型，或可变类型【直接可以在原地修改】直接复制引用\n",
    "a = {\"foo\":\"a\",\"bar\":\"b\",\"tar\":[\"foo\",\"bar\",\"tar\"]}\n",
    "b = a.copy()\n",
    "del b[\"foo\"]\n",
    "print(a)\n",
    "print(b)\n",
    "print(\"====================\")\n",
    "c = a.copy()\n",
    "c['tar'].remove('bar')\n",
    "print(a)\n",
    "print(c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "326592ed",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'foo': 'a', 'bar': 'b', 'tar': ['foo', 'bar', 'tar']}\n",
      "{'foo': 'a', 'bar': 'b', 'tar': ['foo', 'bar']}\n"
     ]
    }
   ],
   "source": [
    "from copy import deepcopy\n",
    "\n",
    "a = {\"foo\":\"a\",\"bar\":\"b\",\"tar\":[\"foo\",\"bar\",\"tar\"]}\n",
    "d = deepcopy(a)\n",
    "d['tar'].remove('tar')\n",
    "print(a)\n",
    "print(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4b43f6a",
   "metadata": {},
   "source": [
    "## 函数操作\n",
    "1. copy\n",
    "2. fromkeys\n",
    "3. get\n",
    "4. setdefault\n",
    "5. items\n",
    "6. keys\n",
    "6. values\n",
    "7. pop popitem\n",
    "8. update"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "db0f14e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'name': 'unknown', 'age': 'unknown'}"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# fromkeys(list,str)\n",
    "keys = ['name','age']\n",
    "dicts = {}.fromkeys(keys,'unknown')\n",
    "dicts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "e57dda86",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "unknown\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "# dict.get(key) 相当于 dict[key]，但是对于不存在的值会返回None\n",
    "print(dicts['name'])\n",
    "print(dicts.get(\"gender\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "38bd072f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'name': 'unknown', 'age': 'unknown'}\n",
      "N/A\n",
      "{'name': 'unknown', 'age': 'unknown', 'gender': 'N/A'}\n"
     ]
    }
   ],
   "source": [
    "# setdefault() 相当于get,但是当value不存在时，会返回指定的值\n",
    "print(dicts)\n",
    "print(dicts.setdefault('gender','N/A'))\n",
    "print(dicts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "2783debc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_items([('name', 'unknown'), ('age', 'unknown')])\n",
      "<class 'dict_items'>\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "# items()\n",
    "# 返回值为特殊的dict_item类型\n",
    "print(dicts.items())\n",
    "print(type(dicts.items()))\n",
    "print(('name','unknown') in dicts.items())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "3481fcec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['name', 'age'])\n"
     ]
    }
   ],
   "source": [
    "# keys()\n",
    "print(dicts.keys())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "e71c50c2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_values(['unknown', 'unknown'])\n"
     ]
    }
   ],
   "source": [
    "# values()\n",
    "print(dicts.values())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "cf9a4334",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('c', 3)\n",
      "{'a': 1, 'b': 2}\n",
      "1\n",
      "{'b': 2, 'c': 3}\n"
     ]
    }
   ],
   "source": [
    "# pop() 弹出指定key的value\n",
    "# popitem() 随机弹出一个元组(key,value)\n",
    "# 注意，字典是没有顺序的\n",
    "from copy import deepcopy\n",
    "\n",
    "dicts = {\"a\":1, \"b\":2, 'c':3}\n",
    "dicts_a = deepcopy(dicts)\n",
    "dicts_b = deepcopy(dicts)\n",
    "\n",
    "print(dicts_b.popitem())\n",
    "print(dicts_b)\n",
    "print(dicts_a.pop(\"a\"))\n",
    "print(dicts_a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "30e15918",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'a': 5, 'b': 2, 'c': 3}"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# update()\n",
    "dicts = {\"a\":1, \"b\":2, 'c':3}\n",
    "ups = {'a':5}\n",
    "dicts.update(ups)\n",
    "dicts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "f272a86e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_values([1, 2, 3])\n",
      "<class 'dict_values'>\n",
      "1\n",
      "1\n",
      "1\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "# values() 返回一个dict_values的对象\n",
    "dicts = {\"a\":1, \"b\":2, 'c':3}\n",
    "print(dicts.values())\n",
    "print(type(dicts.values()))\n",
    "print(dicts['a'])\n",
    "print(dicts.get('a'))\n",
    "print(dicts.setdefault('a','na'))\n",
    "print(dicts.pop('a'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68474cac",
   "metadata": {},
   "source": [
    "# 基础逻辑"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "766dc9e9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "please input your name:collins\n",
      "greeting,_collins!"
     ]
    }
   ],
   "source": [
    "# print\n",
    "greeting = 'greeting'\n",
    "salutation = 'salutation'\n",
    "name = input('please input your name:')\n",
    "print(greeting + ',', name, sep='_', end='!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "id": "b198718f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 2, 3)\n",
      "[2, 3]\n",
      "x=1,y=2,z=3\n"
     ]
    }
   ],
   "source": [
    "# assignment\n",
    "# 解包对象必须与打包对象数量一致，可以使用*操作符接收剩余所有对象\n",
    "values = 1,2,3\n",
    "print(values)\n",
    "x,y,z = values\n",
    "x, *rest = values\n",
    "print(rest)\n",
    "print('x={},y={},z={}'.format(x,y,z))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "id": "e29a1bb3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "key=girlfriend,value=Marion\n",
      "name = Robin\n"
     ]
    }
   ],
   "source": [
    "# dictionary operations\n",
    "scoundrel = {'name':'Robin', 'girlfriend':'Marion'}\n",
    "key,value = scoundrel.popitem()\n",
    "print('key={},value={}'.format(key,value))\n",
    "print('name = {name}'.format_map(scoundrel))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b32b8428",
   "metadata": {},
   "source": [
    "## 内置运算符\n",
    "1. == 比较不变值的大小\n",
    "2. is 比较引用值是否相同\n",
    "3. in 成员资格运算符\n",
    "4. 比较顺序：顺序比较\n",
    "5. assert 断言运算符，在程序出现问题前防止其崩溃,<font color=red>可以设置为检查点</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "1527de4d",
   "metadata": {},
   "outputs": [
    {
     "ename": "AssertionError",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/zh/fmxxp3g1653ccyjmyp5z3bc00000gn/T/ipykernel_13461/1038699948.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mage\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mage\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mAssertionError\u001b[0m: "
     ]
    }
   ],
   "source": [
    "# assert\n",
    "age = 10\n",
    "assert 0 < age < 100\n",
    "age = -1 \n",
    "assert 0 < age < 100"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f835f995",
   "metadata": {},
   "source": [
    "## 循环\n",
    "### 基础知识\n",
    "1. 可迭代对象都是能够使用for循环进行遍历的对象，iterable\n",
    "2. 常见的容器类型如list, tuple, dictionary都是可迭代对象\n",
    "3. 可以在for循环中解序列包\n",
    "\n",
    "### 迭代容器\n",
    "1. 内置函数迭代\n",
    "    1. range(start, end , step) - 左闭右开区间，如果只有一个数，则从0开始\n",
    "    2. index, value = enumerate(list)\n",
    "1. 迭代列表\n",
    "通过index值进行迭代\n",
    "2. 迭代字典\n",
    "通过key值进行迭代\n",
    "3. 迭代两个容器\n",
    "使用for range(len()) + zip()函数<br>\n",
    "zip()函数会在最短的列表停止后终止迭代"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "38027e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "this\n",
      "is\n",
      "an\n",
      "ex\n",
      "parrot\n"
     ]
    }
   ],
   "source": [
    "# 迭代列表\n",
    "words = ['this', 'is', 'an', 'ex', 'parrot']\n",
    "for word in words:\n",
    "    print(word)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "id": "30ed49d1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "2\n",
      "3\n",
      "4\n"
     ]
    }
   ],
   "source": [
    "# 迭代字典\n",
    "dicts = {\"a\":1,\"b\":2,\"c\":3,\"d\":4}\n",
    "for key in dicts:\n",
    "    print(dicts[key])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "8d3f1cad",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "key=a,value=1\n",
      "key=b,value=2\n",
      "key=c,value=3\n",
      "key=d,value=4\n"
     ]
    }
   ],
   "source": [
    "for key, value in dicts.items():\n",
    "    print(\"key={},value={}\".format(key ,value))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "f56c1a3a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bob is 10 years old\n",
      "Andy is 12 years old\n",
      "Caroline is 32 years old\n",
      "Dick is 14 years old\n"
     ]
    }
   ],
   "source": [
    "name = ['Bob',\"Andy\", 'Caroline', \"Dick\"]\n",
    "age = [10,12,32,14]\n",
    "for name,age in zip(name,age):\n",
    "    print(name, 'is', age, 'years old')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "0f213ae3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<zip object at 0x7fc48896bdc0>\n",
      "<class 'zip'>\n"
     ]
    }
   ],
   "source": [
    "age = [\"10\",\"12\",\"32\",\"14\"]\n",
    "zipres = zip(name, age)\n",
    "print(zipres)\n",
    "print(type(zipres))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "3cdc01cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['!', 'd', 'l', 'r', 'o', 'w', ' ', ',', 'o', 'l', 'l', 'e', 'h']\n",
      "!dlrow ,olleh\n",
      "<class 'reversed'>\n"
     ]
    }
   ],
   "source": [
    "strs = 'hello, world!'\n",
    "print(list(reversed(strs)))\n",
    "print(''.join(reversed(strs)))\n",
    "print(type(reversed(strs)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "f12d8854",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75]\n",
      "[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]\n"
     ]
    }
   ],
   "source": [
    "# 推导，不是语句而是一个表达式 - 循环守卫(底层机理其实就是循环，是一个语法糖)\n",
    "# 通常使用列表[]，如果是用元组()则会返回一个显示器\n",
    "res = [x for x in range(1,81,2) if x%3==0]\n",
    "print(res)\n",
    "res2 = [(x,y) for x in range(3) for y in range(4)]\n",
    "print(res2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4e29401",
   "metadata": {},
   "source": [
    "# 内置函数\n",
    "1. exec - 将字符串作为函数执行\n",
    "2. eval - 将字符串进行代数运算\n",
    "3. pass - 什么也不做，用于跳过空的函数体\n",
    "4. del - 只是删除符号引用；<font color=red>实际的引用对象只有在没有引用指向时被垃圾回收机制回收</font>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "d7f2f023",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "dict_keys(['__builtins__', 'sqrt'])\n",
      "{'__builtins__': {'__name__': 'builtins', '__doc__': \"Built-in functions, exceptions, and other objects.\\n\\nNoteworthy: None is the `nil' object; Ellipsis represents `...' in slices.\", '__package__': '', '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'), '__build_class__': <built-in function __build_class__>, '__import__': <built-in function __import__>, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'ascii': <built-in function ascii>, 'bin': <built-in function bin>, 'breakpoint': <built-in function breakpoint>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'compile': <built-in function compile>, 'delattr': <built-in function delattr>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'eval': <built-in function eval>, 'exec': <built-in function exec>, 'format': <built-in function format>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <bound method Kernel.raw_input of <ipykernel.ipkernel.IPythonKernel object at 0x7fc468b22f40>>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'len': <built-in function len>, 'locals': <built-in function locals>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'oct': <built-in function oct>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'repr': <built-in function repr>, 'round': <built-in function round>, 'setattr': <built-in function setattr>, 'sorted': <built-in function sorted>, 'sum': <built-in function sum>, 'vars': <built-in function vars>, 'None': None, 'Ellipsis': Ellipsis, 'NotImplemented': NotImplemented, 'False': False, 'True': True, 'bool': <class 'bool'>, 'memoryview': <class 'memoryview'>, 'bytearray': <class 'bytearray'>, 'bytes': <class 'bytes'>, 'classmethod': <class 'classmethod'>, 'complex': <class 'complex'>, 'dict': <class 'dict'>, 'enumerate': <class 'enumerate'>, 'filter': <class 'filter'>, 'float': <class 'float'>, 'frozenset': <class 'frozenset'>, 'property': <class 'property'>, 'int': <class 'int'>, 'list': <class 'list'>, 'map': <class 'map'>, 'object': <class 'object'>, 'range': <class 'range'>, 'reversed': <class 'reversed'>, 'set': <class 'set'>, 'slice': <class 'slice'>, 'staticmethod': <class 'staticmethod'>, 'str': <class 'str'>, 'super': <class 'super'>, 'tuple': <class 'tuple'>, 'type': <class 'type'>, 'zip': <class 'zip'>, '__debug__': True, 'BaseException': <class 'BaseException'>, 'Exception': <class 'Exception'>, 'TypeError': <class 'TypeError'>, 'StopAsyncIteration': <class 'StopAsyncIteration'>, 'StopIteration': <class 'StopIteration'>, 'GeneratorExit': <class 'GeneratorExit'>, 'SystemExit': <class 'SystemExit'>, 'KeyboardInterrupt': <class 'KeyboardInterrupt'>, 'ImportError': <class 'ImportError'>, 'ModuleNotFoundError': <class 'ModuleNotFoundError'>, 'OSError': <class 'OSError'>, 'EnvironmentError': <class 'OSError'>, 'IOError': <class 'OSError'>, 'EOFError': <class 'EOFError'>, 'RuntimeError': <class 'RuntimeError'>, 'RecursionError': <class 'RecursionError'>, 'NotImplementedError': <class 'NotImplementedError'>, 'NameError': <class 'NameError'>, 'UnboundLocalError': <class 'UnboundLocalError'>, 'AttributeError': <class 'AttributeError'>, 'SyntaxError': <class 'SyntaxError'>, 'IndentationError': <class 'IndentationError'>, 'TabError': <class 'TabError'>, 'LookupError': <class 'LookupError'>, 'IndexError': <class 'IndexError'>, 'KeyError': <class 'KeyError'>, 'ValueError': <class 'ValueError'>, 'UnicodeError': <class 'UnicodeError'>, 'UnicodeEncodeError': <class 'UnicodeEncodeError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'UnicodeTranslateError': <class 'UnicodeTranslateError'>, 'AssertionError': <class 'AssertionError'>, 'ArithmeticError': <class 'ArithmeticError'>, 'FloatingPointError': <class 'FloatingPointError'>, 'OverflowError': <class 'OverflowError'>, 'ZeroDivisionError': <class 'ZeroDivisionError'>, 'SystemError': <class 'SystemError'>, 'ReferenceError': <class 'ReferenceError'>, 'MemoryError': <class 'MemoryError'>, 'BufferError': <class 'BufferError'>, 'Warning': <class 'Warning'>, 'UserWarning': <class 'UserWarning'>, 'DeprecationWarning': <class 'DeprecationWarning'>, 'PendingDeprecationWarning': <class 'PendingDeprecationWarning'>, 'SyntaxWarning': <class 'SyntaxWarning'>, 'RuntimeWarning': <class 'RuntimeWarning'>, 'FutureWarning': <class 'FutureWarning'>, 'ImportWarning': <class 'ImportWarning'>, 'UnicodeWarning': <class 'UnicodeWarning'>, 'BytesWarning': <class 'BytesWarning'>, 'ResourceWarning': <class 'ResourceWarning'>, 'ConnectionError': <class 'ConnectionError'>, 'BlockingIOError': <class 'BlockingIOError'>, 'BrokenPipeError': <class 'BrokenPipeError'>, 'ChildProcessError': <class 'ChildProcessError'>, 'ConnectionAbortedError': <class 'ConnectionAbortedError'>, 'ConnectionRefusedError': <class 'ConnectionRefusedError'>, 'ConnectionResetError': <class 'ConnectionResetError'>, 'FileExistsError': <class 'FileExistsError'>, 'FileNotFoundError': <class 'FileNotFoundError'>, 'IsADirectoryError': <class 'IsADirectoryError'>, 'NotADirectoryError': <class 'NotADirectoryError'>, 'InterruptedError': <class 'InterruptedError'>, 'PermissionError': <class 'PermissionError'>, 'ProcessLookupError': <class 'ProcessLookupError'>, 'TimeoutError': <class 'TimeoutError'>, 'open': <built-in function open>, 'copyright': Copyright (c) 2001-2021 Python Software Foundation.\n",
      "All Rights Reserved.\n",
      "\n",
      "Copyright (c) 2000 BeOpen.com.\n",
      "All Rights Reserved.\n",
      "\n",
      "Copyright (c) 1995-2001 Corporation for National Research Initiatives.\n",
      "All Rights Reserved.\n",
      "\n",
      "Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.\n",
      "All Rights Reserved., 'credits':     Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands\n",
      "    for supporting Python development.  See www.python.org for more information., 'license': Type license() to see the full license text, 'help': Type help() for interactive help, or help(object) for help about object., 'execfile': <function execfile at 0x7fc4884e2280>, 'runfile': <function runfile at 0x7fc468af3f70>, '__IPYTHON__': True, 'display': <function display at 0x7fc4881eec10>, 'get_ipython': <bound method InteractiveShell.get_ipython of <ipykernel.zmqshell.ZMQInteractiveShell object at 0x7fc468b39bb0>>}, 'sqrt': 1}\n"
     ]
    }
   ],
   "source": [
    "# 代码的作用空间可以是一个dict\n",
    "scope = {}\n",
    "exec('sqrt=1',  scope)\n",
    "print(scope['sqrt'])\n",
    "print(scope.keys())\n",
    "print(scope)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "161a5ca3",
   "metadata": {},
   "source": [
    "# chr与ord"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "9a45d5cc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'A'"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chr(65)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "c5a5e40c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "65"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ord('A')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e464f282",
   "metadata": {},
   "source": [
    "# 抽象\n",
    "抽象 ｜ 封装 ｜ 继承 ｜ （多态）\n",
    "## 函数-可调用callable\n",
    "1. callable()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "4be44ccd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n"
     ]
    }
   ],
   "source": [
    "fib = [0,1]\n",
    "for i in range(8):\n",
    "    fib.append(fib[-2]+fib[-1])\n",
    "print(fib)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "id": "327b079f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "# callable判断函数对象是否可调用\n",
    "import math \n",
    "y = math.sqrt\n",
    "print(callable(y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "id": "b7f8e096",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Calculates the square of number x\n",
      "9\n",
      "Help on function square in module __main__:\n",
      "\n",
      "square(x)\n",
      "    Calculates the square of number x\n",
      "\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "# 函数编写 -  默认返回None\n",
    "def square(x):\n",
    "    'Calculates the square of number x'\n",
    "    return x*x\n",
    "print(square.__doc__)\n",
    "print(square(3))\n",
    "print(help(square))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a150191f",
   "metadata": {},
   "source": [
    "## 实参与形参"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "id": "68d0ad69",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "True\n",
      "['novathing', 'scoupe']\n",
      "['novathing', 'scoupe']\n"
     ]
    }
   ],
   "source": [
    "names = ['Gumble', \"scoupe\"]\n",
    "n = names\n",
    "n2 = names\n",
    "\n",
    "def changes(n):\n",
    "    n[0] = \"newthing\"\n",
    "changes(n)\n",
    "n2[0] = \"novathing\"\n",
    "\n",
    "print(n==names)\n",
    "print(n is names)\n",
    "print(names)\n",
    "print(names)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4cc777d0",
   "metadata": {},
   "source": [
    "## 位置参数与关键字参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "f7eb8425",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3\n",
      "(4, 5, 6)\n",
      "{'foo': 4, 'bar': 5}\n"
     ]
    }
   ],
   "source": [
    "# 关键字参数 比 位置参数 的优势在于： 关键字参数可以指定默认值，并且能够避免表意不清的情况\n",
    "# * 收集剩余的所有位置参数，合并为元组；**收集剩余的所有关键字参数，合并为字典\n",
    "# 注意，位置参数需要放置在关键字参数之前\n",
    "\n",
    "# 参数收集\n",
    "def collect_params(x,y,z=3, *pospar, **keypar):\n",
    "    print(x,y,z)\n",
    "    print(pospar)\n",
    "    print(keypar)\n",
    "\n",
    "collect_params(1,2,3,4,5,6,foo=4,bar=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "4f6a9367",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello, Sam!\n",
      "hola, Mike!\n"
     ]
    }
   ],
   "source": [
    "# 参数拆分 - *对应列表拆分 **对应字典拆分\n",
    "def greetings(greeting, name):\n",
    "    print(\"{}, {}!\".format(greeting, name))\n",
    "par = ['hello',\"Sam\"]\n",
    "greetings(*par)\n",
    "\n",
    "def greeting(greeting='hello', name='Sam'):\n",
    "    print(\"{}, {}!\".format(greeting, name))\n",
    "pars = {\"greeting\":\"hola\",\"name\":\"Mike\"}\n",
    "greetings(**pars)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "e2ba3cdd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "calling foo\n",
      "1 2 3 0 0\n"
     ]
    }
   ],
   "source": [
    "# 参数合并与拆分便于函数调用之间的参数传递\n",
    "def foo(x,y,z,m=0,n=0):\n",
    "    print(x,y,z,m,n)\n",
    "    return\n",
    "    \n",
    "def call_foo(*args,**kargs):\n",
    "    print(\"calling foo\")\n",
    "    foo(*args,**kargs)\n",
    "    return\n",
    "    \n",
    "call_foo(1,2,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2bc15f5",
   "metadata": {},
   "source": [
    "## 作用域\n",
    "1. 函数作用域是用来隔离变量的\n",
    "2. 每一个函数都会创建一个新的作用域\n",
    "3. 作用域中变量覆盖时，可以通过global()找到字典，然后获取变量\n",
    "4. 需要修改别的作用域中变量时，通过global进行指定\n",
    "5. 函数嵌套的优点：内部函数可以访问外部函数的作用域 - 涉及到闭包和函数科里化的概念\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "8d09251e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "first:5, second:6\n",
      "30\n",
      "first:3, second:4\n",
      "12\n"
     ]
    }
   ],
   "source": [
    "def multiplier(first):\n",
    "    def multiplyBySecond(second):\n",
    "        print(\"first:{}, second:{}\".format(first,second))\n",
    "        return first * second\n",
    "    return multiplyBySecond\n",
    "\n",
    "double = multiplier(5)\n",
    "print(double(6))\n",
    "\n",
    "print(multiplier(3)(4))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbde4e04",
   "metadata": {},
   "source": [
    "## 递归\n",
    "1. 列表推导可以代替map和filter函数\n",
    "2. reduce函数则不能够使用列表推导进行替换\n",
    "3. map,reduce,filter函数都可以使用lambda函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "id": "90568ef1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n",
      "['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n"
     ]
    }
   ],
   "source": [
    "# map\n",
    "lst = list(map(str,range(10)))\n",
    "print(lst)\n",
    "lst2 = [str(i) for i in range(10)]\n",
    "print(lst2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "265f9a70",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['foo', 'x42']\n",
      "['foo', 'x42']\n",
      "['foo', 'x42']\n"
     ]
    }
   ],
   "source": [
    "# filter\n",
    "def func(x):\n",
    "    return x.isalnum()\n",
    "\n",
    "seq = ['foo','x42', '?!', '***']\n",
    "\n",
    "lst = list(filter(func, seq))\n",
    "print(lst)\n",
    "lst2 = [x for x in seq if x.isalnum()]\n",
    "print(lst2)\n",
    "lst3 = list(filter(lambda x: x.isalnum(), seq))\n",
    "print(lst3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "94660b05",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "723\n"
     ]
    }
   ],
   "source": [
    "from functools import reduce\n",
    "\n",
    "# reduce\n",
    "numbers = [12,34,54,623]\n",
    "lst = reduce(lambda x,y : x+y,numbers)\n",
    "print(lst)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e8fc0a05",
   "metadata": {},
   "source": [
    "# 类\n",
    "1. 在类中定义的代码都在类的命名空间中，类的成员均可以访问这个命名空间\n",
    "2. 特定类实例判断 isinstance(instance,class)\n",
    "3. 特定类基类判断 issubclass(subclass,class)\n",
    "4. 是否含有特定属性 hasattr(instance,name)\n",
    "5. 获取与更改类的属性 getattr(instance,name) setattr(instance,name,value)\n",
    "4. 当然，子类对象一定是父类的实例\n",
    "3. 类的基本信息基本上都在静态成员变量中\n",
    "    1. \\_\\_bases\\_\\_ 指明基类\n",
    "    2. \\_\\_doc\\_\\_ 类说明\n",
    "    3. \\_\\_class\\_\\_ 指明对象的类\n",
    "    4. \\_\\_dict\\_\\_ 查看对象中所有值\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "bbd38c51",
   "metadata": {},
   "outputs": [],
   "source": [
    "from abc import ABC, abstractmethod"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afe41ab3",
   "metadata": {},
   "source": [
    "## 异常\n",
    "1. 抛出异常 raise\n",
    "2. 检视异常 <font color=red>try:</font> 代码块 ... <font color=red>except (异常类1,异常类2,...) as e:</font> 代码块... <font color=red>else:</font> 代码块... <font color=red>finally:</font> 代码块 ..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "832df789",
   "metadata": {},
   "outputs": [],
   "source": [
    "from warnings import filterwarnings\n",
    "from warnings import warn\n",
    "\n",
    "# 告警模块能够抛出异常，异常父类为UserExceptions\n",
    "# 告警通常指打印出来一条消息"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22eb2de2",
   "metadata": {},
   "source": [
    "# 类的内置函数\n",
    "1. 构造函数 __init__\n",
    "2. 析构函数 __del__\n",
    "3. `__getattribute__(self,name)` 访问属性\n",
    "4. `__getattr__(self,name)` 访问不存在属性时调用\n",
    "5. `__setattr__(self,name,value)` 给属性赋值\n",
    "6. `__delattr__(self,name` 删除属性\n",
    "\n",
    "## 迭代器\n",
    "1. 实现了`__iter__()`方法的对象\n",
    "2. `__iter__()`方法会返回一个包含`__next__()`方法的对象 \n",
    "3. `next(it)`与`it.__next__()`等效\n",
    "4. 使用迭代器处理轻量级对象比使用数据结构collection要更便捷\n",
    "5. iter()内置函数可以直接调用可迭代对象中的迭代器对象\n",
    "6. 与迭代器相关的异常类形式StopIteration异常"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "f26c5e13",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1-1-2-3-5-8-13-21-34-55-89-144-233-377-end\n"
     ]
    }
   ],
   "source": [
    "# 一般含有__iter__方法的对象是可迭代的\n",
    "# 含有__next__方法的对象是迭代器\n",
    "\n",
    "class Fib:\n",
    "    def __init__(self):\n",
    "        self.pos_a = 0\n",
    "        self.pos_b = 1\n",
    "    \n",
    "    def __next__(self):\n",
    "        self.pos_a, self.pos_b = self.pos_b, self.pos_a + self.pos_b\n",
    "        if self.pos_a > 10000: raise StopIteration\n",
    "        return self.pos_a\n",
    "    \n",
    "    def __iter__(self):\n",
    "        return self\n",
    "    \n",
    "fib = Fib()\n",
    "for f in fib:\n",
    "    if f < 500:\n",
    "        print(f,end='-')\n",
    "    else:\n",
    "        print('end')\n",
    "        break\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "b52b1016",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "987"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# iter()内置函数能够直接调用迭代器\n",
    "\n",
    "it = iter(fib)\n",
    "next(it)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "56c223a9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1,\n",
       " 1,\n",
       " 2,\n",
       " 3,\n",
       " 5,\n",
       " 8,\n",
       " 13,\n",
       " 21,\n",
       " 34,\n",
       " 55,\n",
       " 89,\n",
       " 144,\n",
       " 233,\n",
       " 377,\n",
       " 610,\n",
       " 987,\n",
       " 1597,\n",
       " 2584,\n",
       " 4181,\n",
       " 6765]"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 不能够重置迭代器，因此只能够重新建立迭代器对象\n",
    "fib2 = Fib()\n",
    "list(fib2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba261a0b",
   "metadata": {},
   "source": [
    "## 生成器\n",
    "1. 含有yield语句的函数是生成器，相当于是函数级别的新特性\n",
    "2. yield语义：函数生成一个值后会被冻结，等待激活后生成下一个值；不像return直接返回\n",
    "3. 生成器是能够通过for语句进行迭代的\n",
    "4. 生成器类似于列表推导，但是使用圆括号包裹；在函数调用中该圆括号可以省略"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "cfc85bb7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'generator'>\n",
      "1-2-3-4-5-4-3-2-1-0-"
     ]
    }
   ],
   "source": [
    "list_a = [[1,2,3],[4,5],[4,3,2,1],[0]]\n",
    "\n",
    "def flatten_nested(lst):\n",
    "    for sublist in lst:\n",
    "        for element in sublist:\n",
    "            yield element\n",
    "\n",
    "print(type(flatten_nested(list_a)))\n",
    "for t in flatten_nested(list_a):\n",
    "    print(t,end='-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "8b2ee251",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16\n",
      "<class 'generator'>\n"
     ]
    }
   ],
   "source": [
    "# 通过圆括号创建生成器对象\n",
    "gen = ((i+2)**2 for i in range(2,27,1))\n",
    "print(next(gen))\n",
    "print(type(gen))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "3b93f99d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784]\n",
      "7700\n"
     ]
    }
   ],
   "source": [
    "# 生成器对象在函数中可以省略圆括号\n",
    "# 生成器对象被函数调用，如list或sum\n",
    "print(list((i+2)**2 for i in range(2,27,1)))\n",
    "print(sum((i+2)**2 for i in range(2,27,1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "id": "a5d6feac",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1-2-3-4-5-6-7-8-9-10-11-temp-foo-bar-tar-\n",
      "<class 'generator'>\n",
      "<class 'function'>\n"
     ]
    }
   ],
   "source": [
    "# 迭代生成器\n",
    "list_b = [[[1,2],[3]],[[[[4]],[5,6]],[7]],[[8,9],[10]],[11],[[['temp','foo'],['bar']],['tar']]]\n",
    "\n",
    "def flatten_iter(lst):\n",
    "    try:\n",
    "        try: lst + ''\n",
    "        except TypeError: pass\n",
    "        else: raise TypeError\n",
    "        for sublist in lst:\n",
    "            for element in flatten_iter(sublist):\n",
    "                yield element\n",
    "    except TypeError:\n",
    "        yield lst\n",
    "        \n",
    "for t in flatten_iter(list_b):\n",
    "    print(t,end='-')\n",
    "print()\n",
    "print(type(flatten_iter(list_b)))\n",
    "print(type(flatten_iter))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6ecfac36",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 回溯解决8皇后问题\n",
    "state=[]\n",
    "num = 8\n",
    "board = 8\n",
    "\n",
    "def \n",
    "\n",
    "def eight_queen(level):\n",
    "    if level is board or \n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "08ad9a3a",
   "metadata": {},
   "source": [
    "# 协议\n",
    "1. java要求对象属于特定的类或实现特定的接口 python要求对象遵循特定的协议\n",
    "2. 确保python中创建的类是新式类，相当于该类是直接继承于object的\n",
    "## 序列和映射协议\n",
    "1. `__len__(self)` 元素数量协议\n",
    "2. `__getitem__(self,key)` 获取元素协议\n",
    "3. 可变序列和映射还追加满足一下两个协议\n",
    "4. `__setitem__(self,key,value)` 修改元素协议\n",
    "5. `__delitem(self,key)` 删除元素协议\n",
    "## 创建新序列的方法\n",
    "1. 直接继承Collections模块的相应基类\n",
    "2. 不需要修改的方法直接继承\n",
    "    3. 需要修改的方法调用`super().__xx__(* args)`进行调用并覆写"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "fd6273f0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "150\n"
     ]
    }
   ],
   "source": [
    "# 新属性如果是一些独立属性的组合属性，可以使用property()函数进行简化\n",
    "# property(get, set, del, doc)\n",
    "# property 本质上就是一个描述符类实例\n",
    "class Rectangle:\n",
    "    def __init__(self):\n",
    "        self.width = 0\n",
    "        self.height = 0\n",
    "    \n",
    "    def set_size(self,size):\n",
    "        self.width, self.height = size\n",
    "        \n",
    "    def get_size(self):\n",
    "        return self.width, self.height\n",
    "    \n",
    "    size = property(get_size, set_size)\n",
    "    \n",
    "r = Rectangle()\n",
    "r.size = 150,100\n",
    "print(r.width)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8fc1f290",
   "metadata": {},
   "source": [
    "# 模块\n",
    "## 逻辑\n",
    "1. 使用import进行自定义模块导入的前提是：需要告知系统模块的存储位置`sys.path.append`\n",
    "2. import只能将相同的模块导入一次\n",
    "3. 多次导入需要使用importlib.reload\n",
    "4. 但是重新导入后仍旧会使用之前已经产生的对象\n",
    "5. 模块在首次被导入程序时执行\n",
    "6. 模块本身有自己的作用域\n",
    "7. 模块本身的`__name__`属性能够指示当前类或对象的作用域名称\n",
    "## 创建包\n",
    "1. 首先将包路径注册到`sys.path`列表中\n",
    "2. 其次在包路径下创立`.py`脚本，这些脚本就是包中的模块\n",
    "3. python的路径需要在系统环境变量中进行设置`.bashrc`\n",
    "4. import一个模块以后，即可以使用`__init__.py`中的内容\n",
    "## 探索包\n",
    "1. `dir()`内置函数能够查看包中含有哪些模块\n",
    "2. `help()`内置函数能够导出函数的解释信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "id": "fc6b2c78",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['/Users/collinsliu/jupyter/python_learning_basics', '/Users/collinsliu/opt/anaconda3/lib/python39.zip', '/Users/collinsliu/opt/anaconda3/lib/python3.9', '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload', '', '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages', '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/aeosa', '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/locket-0.2.1-py3.9.egg', '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/extensions', '/Users/collinsliu/.ipython', '/Users/collinsliu/python/datasci_test/', '/Users/collinsliu/python/datasci_test/module_text']\n"
     ]
    }
   ],
   "source": [
    "# 添加新的模块\n",
    "import sys\n",
    "\n",
    "sys.path.append(\"/Users/collinsliu/python/datasci_test/module_text\")\n",
    "print(sys.path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "9621df83",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello + 0.8939966636005579\n"
     ]
    }
   ],
   "source": [
    "import hello"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "id": "94f6075e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello, 0.8939966636005579\n",
      "<module 'hello' from '/Users/collinsliu/python/datasci_test/module_text/hello.py'>\n",
      "hello\n",
      "__main__\n"
     ]
    }
   ],
   "source": [
    "import importlib\n",
    "hello = importlib.reload(hello)\n",
    "print(hello)\n",
    "print(hello.__name__)\n",
    "print(__name__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "4a79f4ea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['/Users/collinsliu/jupyter/python_learning_basics',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python39.zip',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python3.9',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload',\n",
      " '',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/aeosa',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/locket-0.2.1-py3.9.egg',\n",
      " '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/extensions',\n",
      " '/Users/collinsliu/.ipython',\n",
      " '/Users/collinsliu/python/datasci_test/module_text']\n"
     ]
    }
   ],
   "source": [
    "import sys,pprint\n",
    "\n",
    "pprint.pprint(sys.path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "id": "7d8574dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Error',\n",
       " '__all__',\n",
       " '__builtins__',\n",
       " '__cached__',\n",
       " '__doc__',\n",
       " '__file__',\n",
       " '__loader__',\n",
       " '__name__',\n",
       " '__package__',\n",
       " '__spec__',\n",
       " '_copy_dispatch',\n",
       " '_copy_immutable',\n",
       " '_deepcopy_atomic',\n",
       " '_deepcopy_dict',\n",
       " '_deepcopy_dispatch',\n",
       " '_deepcopy_list',\n",
       " '_deepcopy_method',\n",
       " '_deepcopy_tuple',\n",
       " '_keep_alive',\n",
       " '_reconstruct',\n",
       " 'copy',\n",
       " 'deepcopy',\n",
       " 'dispatch_table',\n",
       " 'error']"
      ]
     },
     "execution_count": 206,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# dir内置函数能够显示出包中所包含的所有类、函数以及变量\n",
    "import copy\n",
    "dir(copy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "id": "f5ee4137",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['Error', 'copy', 'deepcopy']"
      ]
     },
     "execution_count": 208,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# __all__ 显示出包中的所有模块\n",
    "copy.__all__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "id": "83c98d23",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function copy in module copy:\n",
      "\n",
      "copy(x)\n",
      "    Shallow copy operation on arbitrary Python objects.\n",
      "    \n",
      "    See the module's __doc__ string for more info.\n",
      "\n",
      "Help on function deepcopy in module copy:\n",
      "\n",
      "deepcopy(x, memo=None, _nil=[])\n",
      "    Deep copy operation on arbitrary Python objects.\n",
      "    \n",
      "    See the module's __doc__ string for more info.\n",
      "\n",
      "-------\n",
      "Shallow copy operation on arbitrary Python objects.\n",
      "\n",
      "    See the module's __doc__ string for more info.\n",
      "    \n"
     ]
    }
   ],
   "source": [
    "# help()内置函数显示所选择方法的解释文件\n",
    "# help()会包含对于__doc__的调用\n",
    "\n",
    "help(copy.copy)\n",
    "help(copy.deepcopy)\n",
    "print('-------')\n",
    "print(copy.copy.__doc__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "id": "bcf0111a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/Users/collinsliu/opt/anaconda3/lib/python3.9/copy.py\n"
     ]
    }
   ],
   "source": [
    "# __file__能够查看文件的路径\n",
    "print(copy.__file__)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4abeb225",
   "metadata": {},
   "source": [
    "## 标准库\n",
    "### sys\n",
    "1. argv 表示显示传递给python解释器的参数名\n",
    "2. exit\n",
    "3. modules\n",
    "4. path\n",
    "5. platform\n",
    "6. stdin | stdout | stderr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "id": "998a7cb2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'IPython': <module 'IPython' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/__init__.py'>,\n",
      " 'IPython.core': <module 'IPython.core' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/__init__.py'>,\n",
      " 'IPython.core.alias': <module 'IPython.core.alias' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/alias.py'>,\n",
      " 'IPython.core.application': <module 'IPython.core.application' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/application.py'>,\n",
      " 'IPython.core.async_helpers': <module 'IPython.core.async_helpers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/async_helpers.py'>,\n",
      " 'IPython.core.autocall': <module 'IPython.core.autocall' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/autocall.py'>,\n",
      " 'IPython.core.builtin_trap': <module 'IPython.core.builtin_trap' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/builtin_trap.py'>,\n",
      " 'IPython.core.compilerop': <module 'IPython.core.compilerop' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/compilerop.py'>,\n",
      " 'IPython.core.completer': <module 'IPython.core.completer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/completer.py'>,\n",
      " 'IPython.core.completerlib': <module 'IPython.core.completerlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/completerlib.py'>,\n",
      " 'IPython.core.crashhandler': <module 'IPython.core.crashhandler' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/crashhandler.py'>,\n",
      " 'IPython.core.debugger': <module 'IPython.core.debugger' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/debugger.py'>,\n",
      " 'IPython.core.display': <module 'IPython.core.display' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/display.py'>,\n",
      " 'IPython.core.display_trap': <module 'IPython.core.display_trap' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/display_trap.py'>,\n",
      " 'IPython.core.displayhook': <module 'IPython.core.displayhook' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/displayhook.py'>,\n",
      " 'IPython.core.displaypub': <module 'IPython.core.displaypub' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/displaypub.py'>,\n",
      " 'IPython.core.error': <module 'IPython.core.error' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/error.py'>,\n",
      " 'IPython.core.events': <module 'IPython.core.events' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/events.py'>,\n",
      " 'IPython.core.excolors': <module 'IPython.core.excolors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/excolors.py'>,\n",
      " 'IPython.core.extensions': <module 'IPython.core.extensions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/extensions.py'>,\n",
      " 'IPython.core.formatters': <module 'IPython.core.formatters' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/formatters.py'>,\n",
      " 'IPython.core.getipython': <module 'IPython.core.getipython' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/getipython.py'>,\n",
      " 'IPython.core.history': <module 'IPython.core.history' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/history.py'>,\n",
      " 'IPython.core.hooks': <module 'IPython.core.hooks' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/hooks.py'>,\n",
      " 'IPython.core.inputtransformer2': <module 'IPython.core.inputtransformer2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/inputtransformer2.py'>,\n",
      " 'IPython.core.interactiveshell': <module 'IPython.core.interactiveshell' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/interactiveshell.py'>,\n",
      " 'IPython.core.latex_symbols': <module 'IPython.core.latex_symbols' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/latex_symbols.py'>,\n",
      " 'IPython.core.logger': <module 'IPython.core.logger' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/logger.py'>,\n",
      " 'IPython.core.macro': <module 'IPython.core.macro' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/macro.py'>,\n",
      " 'IPython.core.magic': <module 'IPython.core.magic' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magic.py'>,\n",
      " 'IPython.core.magic_arguments': <module 'IPython.core.magic_arguments' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magic_arguments.py'>,\n",
      " 'IPython.core.magics': <module 'IPython.core.magics' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/__init__.py'>,\n",
      " 'IPython.core.magics.auto': <module 'IPython.core.magics.auto' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/auto.py'>,\n",
      " 'IPython.core.magics.basic': <module 'IPython.core.magics.basic' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/basic.py'>,\n",
      " 'IPython.core.magics.code': <module 'IPython.core.magics.code' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/code.py'>,\n",
      " 'IPython.core.magics.config': <module 'IPython.core.magics.config' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/config.py'>,\n",
      " 'IPython.core.magics.display': <module 'IPython.core.magics.display' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/display.py'>,\n",
      " 'IPython.core.magics.execution': <module 'IPython.core.magics.execution' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/execution.py'>,\n",
      " 'IPython.core.magics.extension': <module 'IPython.core.magics.extension' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/extension.py'>,\n",
      " 'IPython.core.magics.history': <module 'IPython.core.magics.history' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/history.py'>,\n",
      " 'IPython.core.magics.logging': <module 'IPython.core.magics.logging' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/logging.py'>,\n",
      " 'IPython.core.magics.namespace': <module 'IPython.core.magics.namespace' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/namespace.py'>,\n",
      " 'IPython.core.magics.osm': <module 'IPython.core.magics.osm' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/osm.py'>,\n",
      " 'IPython.core.magics.packaging': <module 'IPython.core.magics.packaging' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/packaging.py'>,\n",
      " 'IPython.core.magics.pylab': <module 'IPython.core.magics.pylab' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/pylab.py'>,\n",
      " 'IPython.core.magics.script': <module 'IPython.core.magics.script' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/magics/script.py'>,\n",
      " 'IPython.core.oinspect': <module 'IPython.core.oinspect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/oinspect.py'>,\n",
      " 'IPython.core.page': <module 'IPython.core.page' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/page.py'>,\n",
      " 'IPython.core.payload': <module 'IPython.core.payload' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/payload.py'>,\n",
      " 'IPython.core.payloadpage': <module 'IPython.core.payloadpage' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/payloadpage.py'>,\n",
      " 'IPython.core.prefilter': <module 'IPython.core.prefilter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/prefilter.py'>,\n",
      " 'IPython.core.profiledir': <module 'IPython.core.profiledir' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/profiledir.py'>,\n",
      " 'IPython.core.pylabtools': <module 'IPython.core.pylabtools' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py'>,\n",
      " 'IPython.core.release': <module 'IPython.core.release' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/release.py'>,\n",
      " 'IPython.core.shellapp': <module 'IPython.core.shellapp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/shellapp.py'>,\n",
      " 'IPython.core.splitinput': <module 'IPython.core.splitinput' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/splitinput.py'>,\n",
      " 'IPython.core.ultratb': <module 'IPython.core.ultratb' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/ultratb.py'>,\n",
      " 'IPython.core.usage': <module 'IPython.core.usage' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/core/usage.py'>,\n",
      " 'IPython.display': <module 'IPython.display' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/display.py'>,\n",
      " 'IPython.extensions': <module 'IPython.extensions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/extensions/__init__.py'>,\n",
      " 'IPython.extensions.storemagic': <module 'IPython.extensions.storemagic' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/extensions/storemagic.py'>,\n",
      " 'IPython.lib': <module 'IPython.lib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/lib/__init__.py'>,\n",
      " 'IPython.lib.backgroundjobs': <module 'IPython.lib.backgroundjobs' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/lib/backgroundjobs.py'>,\n",
      " 'IPython.lib.clipboard': <module 'IPython.lib.clipboard' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/lib/clipboard.py'>,\n",
      " 'IPython.lib.display': <module 'IPython.lib.display' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/lib/display.py'>,\n",
      " 'IPython.lib.pretty': <module 'IPython.lib.pretty' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/lib/pretty.py'>,\n",
      " 'IPython.lib.security': <module 'IPython.lib.security' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/lib/security.py'>,\n",
      " 'IPython.paths': <module 'IPython.paths' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/paths.py'>,\n",
      " 'IPython.terminal': <module 'IPython.terminal' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/__init__.py'>,\n",
      " 'IPython.terminal.debugger': <module 'IPython.terminal.debugger' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/debugger.py'>,\n",
      " 'IPython.terminal.embed': <module 'IPython.terminal.embed' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/embed.py'>,\n",
      " 'IPython.terminal.interactiveshell': <module 'IPython.terminal.interactiveshell' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/interactiveshell.py'>,\n",
      " 'IPython.terminal.ipapp': <module 'IPython.terminal.ipapp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/ipapp.py'>,\n",
      " 'IPython.terminal.magics': <module 'IPython.terminal.magics' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/magics.py'>,\n",
      " 'IPython.terminal.prompts': <module 'IPython.terminal.prompts' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/prompts.py'>,\n",
      " 'IPython.terminal.pt_inputhooks': <module 'IPython.terminal.pt_inputhooks' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/pt_inputhooks/__init__.py'>,\n",
      " 'IPython.terminal.ptutils': <module 'IPython.terminal.ptutils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/ptutils.py'>,\n",
      " 'IPython.terminal.shortcuts': <module 'IPython.terminal.shortcuts' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/terminal/shortcuts.py'>,\n",
      " 'IPython.testing': <module 'IPython.testing' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/testing/__init__.py'>,\n",
      " 'IPython.testing.skipdoctest': <module 'IPython.testing.skipdoctest' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/testing/skipdoctest.py'>,\n",
      " 'IPython.utils': <module 'IPython.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/__init__.py'>,\n",
      " 'IPython.utils.PyColorize': <module 'IPython.utils.PyColorize' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/PyColorize.py'>,\n",
      " 'IPython.utils._process_common': <module 'IPython.utils._process_common' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/_process_common.py'>,\n",
      " 'IPython.utils._process_posix': <module 'IPython.utils._process_posix' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/_process_posix.py'>,\n",
      " 'IPython.utils._sysinfo': <module 'IPython.utils._sysinfo' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/_sysinfo.py'>,\n",
      " 'IPython.utils.capture': <module 'IPython.utils.capture' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/capture.py'>,\n",
      " 'IPython.utils.colorable': <module 'IPython.utils.colorable' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/colorable.py'>,\n",
      " 'IPython.utils.coloransi': <module 'IPython.utils.coloransi' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/coloransi.py'>,\n",
      " 'IPython.utils.contexts': <module 'IPython.utils.contexts' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/contexts.py'>,\n",
      " 'IPython.utils.data': <module 'IPython.utils.data' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/data.py'>,\n",
      " 'IPython.utils.decorators': <module 'IPython.utils.decorators' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/decorators.py'>,\n",
      " 'IPython.utils.dir2': <module 'IPython.utils.dir2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/dir2.py'>,\n",
      " 'IPython.utils.encoding': <module 'IPython.utils.encoding' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/encoding.py'>,\n",
      " 'IPython.utils.frame': <module 'IPython.utils.frame' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/frame.py'>,\n",
      " 'IPython.utils.generics': <module 'IPython.utils.generics' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/generics.py'>,\n",
      " 'IPython.utils.importstring': <module 'IPython.utils.importstring' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/importstring.py'>,\n",
      " 'IPython.utils.io': <module 'IPython.utils.io' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/io.py'>,\n",
      " 'IPython.utils.ipstruct': <module 'IPython.utils.ipstruct' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/ipstruct.py'>,\n",
      " 'IPython.utils.module_paths': <module 'IPython.utils.module_paths' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/module_paths.py'>,\n",
      " 'IPython.utils.openpy': <module 'IPython.utils.openpy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/openpy.py'>,\n",
      " 'IPython.utils.path': <module 'IPython.utils.path' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/path.py'>,\n",
      " 'IPython.utils.process': <module 'IPython.utils.process' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/process.py'>,\n",
      " 'IPython.utils.py3compat': <module 'IPython.utils.py3compat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/py3compat.py'>,\n",
      " 'IPython.utils.sentinel': <module 'IPython.utils.sentinel' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/sentinel.py'>,\n",
      " 'IPython.utils.strdispatch': <module 'IPython.utils.strdispatch' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/strdispatch.py'>,\n",
      " 'IPython.utils.sysinfo': <module 'IPython.utils.sysinfo' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/sysinfo.py'>,\n",
      " 'IPython.utils.syspathcontext': <module 'IPython.utils.syspathcontext' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/syspathcontext.py'>,\n",
      " 'IPython.utils.tempdir': <module 'IPython.utils.tempdir' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/tempdir.py'>,\n",
      " 'IPython.utils.terminal': <module 'IPython.utils.terminal' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/terminal.py'>,\n",
      " 'IPython.utils.text': <module 'IPython.utils.text' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/text.py'>,\n",
      " 'IPython.utils.timing': <module 'IPython.utils.timing' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/timing.py'>,\n",
      " 'IPython.utils.tokenutil': <module 'IPython.utils.tokenutil' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/tokenutil.py'>,\n",
      " 'IPython.utils.wildcard': <module 'IPython.utils.wildcard' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/utils/wildcard.py'>,\n",
      " '__future__': <module '__future__' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/__future__.py'>,\n",
      " '__main__': <module '__main__'>,\n",
      " '_abc': <module '_abc' (built-in)>,\n",
      " '_ast': <module '_ast' (built-in)>,\n",
      " '_asyncio': <module '_asyncio' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_asyncio.cpython-39-darwin.so'>,\n",
      " '_bisect': <module '_bisect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_bisect.cpython-39-darwin.so'>,\n",
      " '_blake2': <module '_blake2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_blake2.cpython-39-darwin.so'>,\n",
      " '_bootlocale': <module '_bootlocale' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_bootlocale.py'>,\n",
      " '_bz2': <module '_bz2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_bz2.cpython-39-darwin.so'>,\n",
      " '_codecs': <module '_codecs' (built-in)>,\n",
      " '_collections': <module '_collections' (built-in)>,\n",
      " '_collections_abc': <module '_collections_abc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_collections_abc.py'>,\n",
      " '_compat_pickle': <module '_compat_pickle' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_compat_pickle.py'>,\n",
      " '_compression': <module '_compression' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_compression.py'>,\n",
      " '_contextvars': <module '_contextvars' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_contextvars.cpython-39-darwin.so'>,\n",
      " '_ctypes': <module '_ctypes' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_ctypes.cpython-39-darwin.so'>,\n",
      " '_curses': <module '_curses' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_curses.cpython-39-darwin.so'>,\n",
      " '_cython_0_29_24': <module '_cython_0_29_24'>,\n",
      " '_datetime': <module '_datetime' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_datetime.cpython-39-darwin.so'>,\n",
      " '_decimal': <module '_decimal' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_decimal.cpython-39-darwin.so'>,\n",
      " '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>,\n",
      " '_frozen_importlib_external': <module 'importlib._bootstrap_external' (frozen)>,\n",
      " '_functools': <module '_functools' (built-in)>,\n",
      " '_hashlib': <module '_hashlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_hashlib.cpython-39-darwin.so'>,\n",
      " '_heapq': <module '_heapq' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_heapq.cpython-39-darwin.so'>,\n",
      " '_imp': <module '_imp' (built-in)>,\n",
      " '_io': <module 'io' (built-in)>,\n",
      " '_json': <module '_json' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_json.cpython-39-darwin.so'>,\n",
      " '_locale': <module '_locale' (built-in)>,\n",
      " '_lsprof': <module '_lsprof' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_lsprof.cpython-39-darwin.so'>,\n",
      " '_lzma': <module '_lzma' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_lzma.cpython-39-darwin.so'>,\n",
      " '_opcode': <module '_opcode' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_opcode.cpython-39-darwin.so'>,\n",
      " '_operator': <module '_operator' (built-in)>,\n",
      " '_osx_support': <module '_osx_support' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_osx_support.py'>,\n",
      " '_pickle': <module '_pickle' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_pickle.cpython-39-darwin.so'>,\n",
      " '_posixsubprocess': <module '_posixsubprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_posixsubprocess.cpython-39-darwin.so'>,\n",
      " '_pydev_bundle': <module '_pydev_bundle' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/__init__.py'>,\n",
      " '_pydev_bundle._pydev_calltip_util': <module '_pydev_bundle._pydev_calltip_util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py'>,\n",
      " '_pydev_bundle._pydev_completer': <module '_pydev_bundle._pydev_completer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py'>,\n",
      " '_pydev_bundle._pydev_filesystem_encoding': <module '_pydev_bundle._pydev_filesystem_encoding' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py'>,\n",
      " '_pydev_bundle._pydev_imports_tipper': <module '_pydev_bundle._pydev_imports_tipper' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py'>,\n",
      " '_pydev_bundle._pydev_tipper_common': <module '_pydev_bundle._pydev_tipper_common' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py'>,\n",
      " '_pydev_bundle.fsnotify': <module '_pydev_bundle.fsnotify' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py'>,\n",
      " '_pydev_bundle.pydev_console_utils': <module '_pydev_bundle.pydev_console_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py'>,\n",
      " '_pydev_bundle.pydev_imports': <module '_pydev_bundle.pydev_imports' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py'>,\n",
      " '_pydev_bundle.pydev_is_thread_alive': <module '_pydev_bundle.pydev_is_thread_alive' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py'>,\n",
      " '_pydev_bundle.pydev_log': <module '_pydev_bundle.pydev_log' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py'>,\n",
      " '_pydev_bundle.pydev_monkey': <module '_pydev_bundle.pydev_monkey' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py'>,\n",
      " '_pydev_bundle.pydev_override': <module '_pydev_bundle.pydev_override' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py'>,\n",
      " '_pydev_bundle.pydev_umd': <module '_pydev_bundle.pydev_umd' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py'>,\n",
      " '_pydev_imps': <module '_pydev_imps' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_imps/__init__.py'>,\n",
      " '_pydev_imps._pydev_execfile': <module '_pydev_imps._pydev_execfile' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_imps/_pydev_execfile.py'>,\n",
      " '_pydev_imps._pydev_saved_modules': <module '_pydev_imps._pydev_saved_modules' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_imps/_pydev_saved_modules.py'>,\n",
      " '_pydev_runfiles': <module '_pydev_runfiles' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydev_runfiles/__init__.py'>,\n",
      " '_pydevd_bundle': <module '_pydevd_bundle' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/__init__.py'>,\n",
      " '_pydevd_bundle._debug_adapter': <module '_pydevd_bundle._debug_adapter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__init__.py'>,\n",
      " '_pydevd_bundle._debug_adapter.pydevd_base_schema': <module '_pydevd_bundle._debug_adapter.pydevd_base_schema' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py'>,\n",
      " '_pydevd_bundle._debug_adapter.pydevd_schema': <module '_pydevd_bundle._debug_adapter.pydevd_schema' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py'>,\n",
      " '_pydevd_bundle._debug_adapter.pydevd_schema_log': <module '_pydevd_bundle._debug_adapter.pydevd_schema_log' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py'>,\n",
      " '_pydevd_bundle.pydevd_additional_thread_info': <module '_pydevd_bundle.pydevd_additional_thread_info' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py'>,\n",
      " '_pydevd_bundle.pydevd_additional_thread_info_regular': <module '_pydevd_bundle.pydevd_additional_thread_info_regular' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py'>,\n",
      " '_pydevd_bundle.pydevd_api': <module '_pydevd_bundle.pydevd_api' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py'>,\n",
      " '_pydevd_bundle.pydevd_breakpoints': <module '_pydevd_bundle.pydevd_breakpoints' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py'>,\n",
      " '_pydevd_bundle.pydevd_bytecode_utils': <module '_pydevd_bundle.pydevd_bytecode_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py'>,\n",
      " '_pydevd_bundle.pydevd_collect_bytecode_info': <module '_pydevd_bundle.pydevd_collect_bytecode_info' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py'>,\n",
      " '_pydevd_bundle.pydevd_comm': <module '_pydevd_bundle.pydevd_comm' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py'>,\n",
      " '_pydevd_bundle.pydevd_comm_constants': <module '_pydevd_bundle.pydevd_comm_constants' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py'>,\n",
      " '_pydevd_bundle.pydevd_console': <module '_pydevd_bundle.pydevd_console' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py'>,\n",
      " '_pydevd_bundle.pydevd_constants': <module '_pydevd_bundle.pydevd_constants' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py'>,\n",
      " '_pydevd_bundle.pydevd_custom_frames': <module '_pydevd_bundle.pydevd_custom_frames' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py'>,\n",
      " '_pydevd_bundle.pydevd_cython': <module '_pydevd_bundle.pydevd_cython' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.cpython-39-darwin.so'>,\n",
      " '_pydevd_bundle.pydevd_cython_wrapper': <module '_pydevd_bundle.pydevd_cython_wrapper' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py'>,\n",
      " '_pydevd_bundle.pydevd_daemon_thread': <module '_pydevd_bundle.pydevd_daemon_thread' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py'>,\n",
      " '_pydevd_bundle.pydevd_defaults': <module '_pydevd_bundle.pydevd_defaults' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py'>,\n",
      " '_pydevd_bundle.pydevd_dont_trace': <module '_pydevd_bundle.pydevd_dont_trace' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py'>,\n",
      " '_pydevd_bundle.pydevd_dont_trace_files': <module '_pydevd_bundle.pydevd_dont_trace_files' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py'>,\n",
      " '_pydevd_bundle.pydevd_exec2': <module '_pydevd_bundle.pydevd_exec2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py'>,\n",
      " '_pydevd_bundle.pydevd_extension_api': <module '_pydevd_bundle.pydevd_extension_api' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py'>,\n",
      " '_pydevd_bundle.pydevd_extension_utils': <module '_pydevd_bundle.pydevd_extension_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py'>,\n",
      " '_pydevd_bundle.pydevd_filtering': <module '_pydevd_bundle.pydevd_filtering' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py'>,\n",
      " '_pydevd_bundle.pydevd_frame': <module '_pydevd_bundle.pydevd_frame' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py'>,\n",
      " '_pydevd_bundle.pydevd_frame_utils': <module '_pydevd_bundle.pydevd_frame_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py'>,\n",
      " '_pydevd_bundle.pydevd_import_class': <module '_pydevd_bundle.pydevd_import_class' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py'>,\n",
      " '_pydevd_bundle.pydevd_io': <module '_pydevd_bundle.pydevd_io' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py'>,\n",
      " '_pydevd_bundle.pydevd_json_debug_options': <module '_pydevd_bundle.pydevd_json_debug_options' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py'>,\n",
      " '_pydevd_bundle.pydevd_net_command': <module '_pydevd_bundle.pydevd_net_command' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py'>,\n",
      " '_pydevd_bundle.pydevd_net_command_factory_json': <module '_pydevd_bundle.pydevd_net_command_factory_json' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py'>,\n",
      " '_pydevd_bundle.pydevd_net_command_factory_xml': <module '_pydevd_bundle.pydevd_net_command_factory_xml' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py'>,\n",
      " '_pydevd_bundle.pydevd_plugin_utils': <module '_pydevd_bundle.pydevd_plugin_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py'>,\n",
      " '_pydevd_bundle.pydevd_process_net_command': <module '_pydevd_bundle.pydevd_process_net_command' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py'>,\n",
      " '_pydevd_bundle.pydevd_process_net_command_json': <module '_pydevd_bundle.pydevd_process_net_command_json' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py'>,\n",
      " '_pydevd_bundle.pydevd_reload': <module '_pydevd_bundle.pydevd_reload' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py'>,\n",
      " '_pydevd_bundle.pydevd_resolver': <module '_pydevd_bundle.pydevd_resolver' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py'>,\n",
      " '_pydevd_bundle.pydevd_safe_repr': <module '_pydevd_bundle.pydevd_safe_repr' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py'>,\n",
      " '_pydevd_bundle.pydevd_save_locals': <module '_pydevd_bundle.pydevd_save_locals' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py'>,\n",
      " '_pydevd_bundle.pydevd_source_mapping': <module '_pydevd_bundle.pydevd_source_mapping' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py'>,\n",
      " '_pydevd_bundle.pydevd_suspended_frames': <module '_pydevd_bundle.pydevd_suspended_frames' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py'>,\n",
      " '_pydevd_bundle.pydevd_thread_lifecycle': <module '_pydevd_bundle.pydevd_thread_lifecycle' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py'>,\n",
      " '_pydevd_bundle.pydevd_timeout': <module '_pydevd_bundle.pydevd_timeout' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py'>,\n",
      " '_pydevd_bundle.pydevd_trace_api': <module '_pydevd_bundle.pydevd_trace_api' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py'>,\n",
      " '_pydevd_bundle.pydevd_trace_dispatch': <module '_pydevd_bundle.pydevd_trace_dispatch' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py'>,\n",
      " '_pydevd_bundle.pydevd_traceproperty': <module '_pydevd_bundle.pydevd_traceproperty' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py'>,\n",
      " '_pydevd_bundle.pydevd_utils': <module '_pydevd_bundle.pydevd_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py'>,\n",
      " '_pydevd_bundle.pydevd_vars': <module '_pydevd_bundle.pydevd_vars' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py'>,\n",
      " '_pydevd_bundle.pydevd_vm_type': <module '_pydevd_bundle.pydevd_vm_type' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py'>,\n",
      " '_pydevd_bundle.pydevd_xml': <module '_pydevd_bundle.pydevd_xml' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py'>,\n",
      " '_pydevd_frame_eval': <module '_pydevd_frame_eval' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/__init__.py'>,\n",
      " '_pydevd_frame_eval.pydevd_frame_eval_main': <module '_pydevd_frame_eval.pydevd_frame_eval_main' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py'>,\n",
      " '_pydevd_frame_eval.vendored': <module '_pydevd_frame_eval.vendored' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/__init__.py'>,\n",
      " '_pydevd_frame_eval.vendored.bytecode': <module '_pydevd_frame_eval.vendored.bytecode' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py'>,\n",
      " '_pydevd_frame_eval.vendored.bytecode.bytecode': <module '_pydevd_frame_eval.vendored.bytecode.bytecode' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py'>,\n",
      " '_pydevd_frame_eval.vendored.bytecode.cfg': <module '_pydevd_frame_eval.vendored.bytecode.cfg' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py'>,\n",
      " '_pydevd_frame_eval.vendored.bytecode.concrete': <module '_pydevd_frame_eval.vendored.bytecode.concrete' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py'>,\n",
      " '_pydevd_frame_eval.vendored.bytecode.flags': <module '_pydevd_frame_eval.vendored.bytecode.flags' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py'>,\n",
      " '_pydevd_frame_eval.vendored.bytecode.instr': <module '_pydevd_frame_eval.vendored.bytecode.instr' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py'>,\n",
      " '_queue': <module '_queue' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_queue.cpython-39-darwin.so'>,\n",
      " '_random': <module '_random' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_random.cpython-39-darwin.so'>,\n",
      " '_scproxy': <module '_scproxy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_scproxy.cpython-39-darwin.so'>,\n",
      " '_sha512': <module '_sha512' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_sha512.cpython-39-darwin.so'>,\n",
      " '_signal': <module '_signal' (built-in)>,\n",
      " '_sitebuiltins': <module '_sitebuiltins' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_sitebuiltins.py'>,\n",
      " '_socket': <module '_socket' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_socket.cpython-39-darwin.so'>,\n",
      " '_sqlite3': <module '_sqlite3' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_sqlite3.cpython-39-darwin.so'>,\n",
      " '_sre': <module '_sre' (built-in)>,\n",
      " '_ssl': <module '_ssl' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_ssl.cpython-39-darwin.so'>,\n",
      " '_stat': <module '_stat' (built-in)>,\n",
      " '_string': <module '_string' (built-in)>,\n",
      " '_strptime': <module '_strptime' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_strptime.py'>,\n",
      " '_struct': <module '_struct' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_struct.cpython-39-darwin.so'>,\n",
      " '_sysconfigdata__darwin_darwin': <module '_sysconfigdata__darwin_darwin' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_sysconfigdata__darwin_darwin.py'>,\n",
      " '_thread': <module '_thread' (built-in)>,\n",
      " '_uuid': <module '_uuid' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/_uuid.cpython-39-darwin.so'>,\n",
      " '_warnings': <module '_warnings' (built-in)>,\n",
      " '_weakref': <module '_weakref' (built-in)>,\n",
      " '_weakrefset': <module '_weakrefset' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/_weakrefset.py'>,\n",
      " 'abc': <module 'abc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/abc.py'>,\n",
      " 'appnope': <module 'appnope' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/appnope/__init__.py'>,\n",
      " 'appnope._nope': <module 'appnope._nope' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/appnope/_nope.py'>,\n",
      " 'argparse': <module 'argparse' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/argparse.py'>,\n",
      " 'array': <module 'array' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/array.cpython-39-darwin.so'>,\n",
      " 'ast': <module 'ast' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ast.py'>,\n",
      " 'asyncio': <module 'asyncio' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/__init__.py'>,\n",
      " 'asyncio.base_events': <module 'asyncio.base_events' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/base_events.py'>,\n",
      " 'asyncio.base_futures': <module 'asyncio.base_futures' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/base_futures.py'>,\n",
      " 'asyncio.base_subprocess': <module 'asyncio.base_subprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/base_subprocess.py'>,\n",
      " 'asyncio.base_tasks': <module 'asyncio.base_tasks' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/base_tasks.py'>,\n",
      " 'asyncio.constants': <module 'asyncio.constants' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/constants.py'>,\n",
      " 'asyncio.coroutines': <module 'asyncio.coroutines' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/coroutines.py'>,\n",
      " 'asyncio.events': <module 'asyncio.events' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/events.py'>,\n",
      " 'asyncio.exceptions': <module 'asyncio.exceptions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/exceptions.py'>,\n",
      " 'asyncio.format_helpers': <module 'asyncio.format_helpers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/format_helpers.py'>,\n",
      " 'asyncio.futures': <module 'asyncio.futures' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/futures.py'>,\n",
      " 'asyncio.locks': <module 'asyncio.locks' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/locks.py'>,\n",
      " 'asyncio.log': <module 'asyncio.log' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/log.py'>,\n",
      " 'asyncio.protocols': <module 'asyncio.protocols' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/protocols.py'>,\n",
      " 'asyncio.queues': <module 'asyncio.queues' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/queues.py'>,\n",
      " 'asyncio.runners': <module 'asyncio.runners' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/runners.py'>,\n",
      " 'asyncio.selector_events': <module 'asyncio.selector_events' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/selector_events.py'>,\n",
      " 'asyncio.sslproto': <module 'asyncio.sslproto' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/sslproto.py'>,\n",
      " 'asyncio.staggered': <module 'asyncio.staggered' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/staggered.py'>,\n",
      " 'asyncio.streams': <module 'asyncio.streams' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/streams.py'>,\n",
      " 'asyncio.subprocess': <module 'asyncio.subprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/subprocess.py'>,\n",
      " 'asyncio.tasks': <module 'asyncio.tasks' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/tasks.py'>,\n",
      " 'asyncio.threads': <module 'asyncio.threads' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/threads.py'>,\n",
      " 'asyncio.transports': <module 'asyncio.transports' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/transports.py'>,\n",
      " 'asyncio.trsock': <module 'asyncio.trsock' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/trsock.py'>,\n",
      " 'asyncio.unix_events': <module 'asyncio.unix_events' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/asyncio/unix_events.py'>,\n",
      " 'atexit': <module 'atexit' (built-in)>,\n",
      " 'backcall': <module 'backcall' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/backcall/__init__.py'>,\n",
      " 'backcall.backcall': <module 'backcall.backcall' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/backcall/backcall.py'>,\n",
      " 'base64': <module 'base64' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/base64.py'>,\n",
      " 'bdb': <module 'bdb' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/bdb.py'>,\n",
      " 'binascii': <module 'binascii' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/binascii.cpython-39-darwin.so'>,\n",
      " 'bisect': <module 'bisect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/bisect.py'>,\n",
      " 'builtins': <module 'builtins' (built-in)>,\n",
      " 'bz2': <module 'bz2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/bz2.py'>,\n",
      " 'cProfile': <module 'cProfile' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/cProfile.py'>,\n",
      " 'calendar': <module 'calendar' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/calendar.py'>,\n",
      " 'cmd': <module 'cmd' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/cmd.py'>,\n",
      " 'code': <module 'code' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/code.py'>,\n",
      " 'codecs': <module 'codecs' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/codecs.py'>,\n",
      " 'codeop': <module 'codeop' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/codeop.py'>,\n",
      " 'collections': <module 'collections' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/collections/__init__.py'>,\n",
      " 'collections.abc': <module 'collections.abc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/collections/abc.py'>,\n",
      " 'colorama': <module 'colorama' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/colorama/__init__.py'>,\n",
      " 'colorama.ansi': <module 'colorama.ansi' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/colorama/ansi.py'>,\n",
      " 'colorama.ansitowin32': <module 'colorama.ansitowin32' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/colorama/ansitowin32.py'>,\n",
      " 'colorama.initialise': <module 'colorama.initialise' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/colorama/initialise.py'>,\n",
      " 'colorama.win32': <module 'colorama.win32' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/colorama/win32.py'>,\n",
      " 'colorama.winterm': <module 'colorama.winterm' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/colorama/winterm.py'>,\n",
      " 'colorsys': <module 'colorsys' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/colorsys.py'>,\n",
      " 'concurrent': <module 'concurrent' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/concurrent/__init__.py'>,\n",
      " 'concurrent.futures': <module 'concurrent.futures' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/concurrent/futures/__init__.py'>,\n",
      " 'concurrent.futures._base': <module 'concurrent.futures._base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/concurrent/futures/_base.py'>,\n",
      " 'contextlib': <module 'contextlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/contextlib.py'>,\n",
      " 'contextvars': <module 'contextvars' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/contextvars.py'>,\n",
      " 'copy': <module 'copy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/copy.py'>,\n",
      " 'copyreg': <module 'copyreg' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/copyreg.py'>,\n",
      " 'ctypes': <module 'ctypes' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/__init__.py'>,\n",
      " 'ctypes._endian': <module 'ctypes._endian' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/_endian.py'>,\n",
      " 'ctypes.macholib': <module 'ctypes.macholib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/macholib/__init__.py'>,\n",
      " 'ctypes.macholib.dyld': <module 'ctypes.macholib.dyld' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/macholib/dyld.py'>,\n",
      " 'ctypes.macholib.dylib': <module 'ctypes.macholib.dylib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/macholib/dylib.py'>,\n",
      " 'ctypes.macholib.framework': <module 'ctypes.macholib.framework' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/macholib/framework.py'>,\n",
      " 'ctypes.util': <module 'ctypes.util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ctypes/util.py'>,\n",
      " 'curses': <module 'curses' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/curses/__init__.py'>,\n",
      " 'cython_runtime': <module 'cython_runtime'>,\n",
      " 'dataclasses': <module 'dataclasses' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/dataclasses.py'>,\n",
      " 'datetime': <module 'datetime' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/datetime.py'>,\n",
      " 'dateutil': <module 'dateutil' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/__init__.py'>,\n",
      " 'dateutil._common': <module 'dateutil._common' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/_common.py'>,\n",
      " 'dateutil._version': <module 'dateutil._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/_version.py'>,\n",
      " 'dateutil.parser': <module 'dateutil.parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/parser/__init__.py'>,\n",
      " 'dateutil.parser._parser': <module 'dateutil.parser._parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/parser/_parser.py'>,\n",
      " 'dateutil.parser.isoparser': <module 'dateutil.parser.isoparser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/parser/isoparser.py'>,\n",
      " 'dateutil.relativedelta': <module 'dateutil.relativedelta' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/relativedelta.py'>,\n",
      " 'dateutil.tz': <module 'dateutil.tz' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/tz/__init__.py'>,\n",
      " 'dateutil.tz._common': <module 'dateutil.tz._common' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/tz/_common.py'>,\n",
      " 'dateutil.tz._factories': <module 'dateutil.tz._factories' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/tz/_factories.py'>,\n",
      " 'dateutil.tz.tz': <module 'dateutil.tz.tz' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/dateutil/tz/tz.py'>,\n",
      " 'debugpy': <module 'debugpy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/__init__.py'>,\n",
      " 'debugpy._vendored': <module 'debugpy._vendored' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/__init__.py'>,\n",
      " 'debugpy._vendored._util': <module 'debugpy._vendored._util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/_util.py'>,\n",
      " 'debugpy._vendored.force_pydevd': <module 'debugpy._vendored.force_pydevd' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/force_pydevd.py'>,\n",
      " 'debugpy._version': <module 'debugpy._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_version.py'>,\n",
      " 'debugpy.adapter': <module 'debugpy.adapter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/adapter/__init__.py'>,\n",
      " 'debugpy.common': <module 'debugpy.common' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/__init__.py'>,\n",
      " 'debugpy.common.compat': <module 'debugpy.common.compat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/compat.py'>,\n",
      " 'debugpy.common.fmt': <module 'debugpy.common.fmt' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/fmt.py'>,\n",
      " 'debugpy.common.json': <module 'debugpy.common.json' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/json.py'>,\n",
      " 'debugpy.common.log': <module 'debugpy.common.log' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/log.py'>,\n",
      " 'debugpy.common.sockets': <module 'debugpy.common.sockets' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/sockets.py'>,\n",
      " 'debugpy.common.timestamp': <module 'debugpy.common.timestamp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/timestamp.py'>,\n",
      " 'debugpy.common.util': <module 'debugpy.common.util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/common/util.py'>,\n",
      " 'debugpy.server': <module 'debugpy.server' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/server/__init__.py'>,\n",
      " 'debugpy.server.api': <module 'debugpy.server.api' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/server/api.py'>,\n",
      " 'decimal': <module 'decimal' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/decimal.py'>,\n",
      " 'decorator': <module 'decorator' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/decorator.py'>,\n",
      " 'difflib': <module 'difflib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/difflib.py'>,\n",
      " 'dis': <module 'dis' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/dis.py'>,\n",
      " 'distutils': <module 'distutils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/distutils/__init__.py'>,\n",
      " 'distutils.version': <module 'distutils.version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/distutils/version.py'>,\n",
      " 'email': <module 'email' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/__init__.py'>,\n",
      " 'email._encoded_words': <module 'email._encoded_words' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/_encoded_words.py'>,\n",
      " 'email._parseaddr': <module 'email._parseaddr' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/_parseaddr.py'>,\n",
      " 'email._policybase': <module 'email._policybase' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/_policybase.py'>,\n",
      " 'email.base64mime': <module 'email.base64mime' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/base64mime.py'>,\n",
      " 'email.charset': <module 'email.charset' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/charset.py'>,\n",
      " 'email.encoders': <module 'email.encoders' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/encoders.py'>,\n",
      " 'email.errors': <module 'email.errors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/errors.py'>,\n",
      " 'email.feedparser': <module 'email.feedparser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/feedparser.py'>,\n",
      " 'email.header': <module 'email.header' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/header.py'>,\n",
      " 'email.iterators': <module 'email.iterators' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/iterators.py'>,\n",
      " 'email.message': <module 'email.message' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/message.py'>,\n",
      " 'email.parser': <module 'email.parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/parser.py'>,\n",
      " 'email.quoprimime': <module 'email.quoprimime' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/quoprimime.py'>,\n",
      " 'email.utils': <module 'email.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/email/utils.py'>,\n",
      " 'encodings': <module 'encodings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/__init__.py'>,\n",
      " 'encodings.aliases': <module 'encodings.aliases' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/aliases.py'>,\n",
      " 'encodings.ascii': <module 'encodings.ascii' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/ascii.py'>,\n",
      " 'encodings.cp437': <module 'encodings.cp437' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/cp437.py'>,\n",
      " 'encodings.idna': <module 'encodings.idna' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/idna.py'>,\n",
      " 'encodings.latin_1': <module 'encodings.latin_1' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/latin_1.py'>,\n",
      " 'encodings.utf_8': <module 'encodings.utf_8' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/encodings/utf_8.py'>,\n",
      " 'enum': <module 'enum' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/enum.py'>,\n",
      " 'errno': <module 'errno' (built-in)>,\n",
      " 'faulthandler': <module 'faulthandler' (built-in)>,\n",
      " 'fcntl': <module 'fcntl' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/fcntl.cpython-39-darwin.so'>,\n",
      " 'filecmp': <module 'filecmp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/filecmp.py'>,\n",
      " 'fnmatch': <module 'fnmatch' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/fnmatch.py'>,\n",
      " 'functools': <module 'functools' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/functools.py'>,\n",
      " 'gc': <module 'gc' (built-in)>,\n",
      " 'genericpath': <module 'genericpath' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/genericpath.py'>,\n",
      " 'getopt': <module 'getopt' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/getopt.py'>,\n",
      " 'getpass': <module 'getpass' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/getpass.py'>,\n",
      " 'gettext': <module 'gettext' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/gettext.py'>,\n",
      " 'glob': <module 'glob' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/glob.py'>,\n",
      " 'google': <module 'google' (namespace)>,\n",
      " 'grp': <module 'grp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/grp.cpython-39-darwin.so'>,\n",
      " 'gzip': <module 'gzip' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/gzip.py'>,\n",
      " 'hashlib': <module 'hashlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/hashlib.py'>,\n",
      " 'heapq': <module 'heapq' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/heapq.py'>,\n",
      " 'hello': <module 'hello' from '/Users/collinsliu/python/datasci_test/module_text/hello.py'>,\n",
      " 'hmac': <module 'hmac' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/hmac.py'>,\n",
      " 'html': <module 'html' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/html/__init__.py'>,\n",
      " 'html.entities': <module 'html.entities' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/html/entities.py'>,\n",
      " 'http': <module 'http' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/http/__init__.py'>,\n",
      " 'http.client': <module 'http.client' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/http/client.py'>,\n",
      " 'http.server': <module 'http.server' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/http/server.py'>,\n",
      " 'imp': <module 'imp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/imp.py'>,\n",
      " 'importlib': <module 'importlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/importlib/__init__.py'>,\n",
      " 'importlib._bootstrap': <module 'importlib._bootstrap' (frozen)>,\n",
      " 'importlib._bootstrap_external': <module 'importlib._bootstrap_external' (frozen)>,\n",
      " 'importlib.abc': <module 'importlib.abc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/importlib/abc.py'>,\n",
      " 'importlib.machinery': <module 'importlib.machinery' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/importlib/machinery.py'>,\n",
      " 'importlib.util': <module 'importlib.util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/importlib/util.py'>,\n",
      " 'inspect': <module 'inspect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/inspect.py'>,\n",
      " 'io': <module 'io' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/io.py'>,\n",
      " 'ipykernel': <module 'ipykernel' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/__init__.py'>,\n",
      " 'ipykernel._version': <module 'ipykernel._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/_version.py'>,\n",
      " 'ipykernel.comm': <module 'ipykernel.comm' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/comm/__init__.py'>,\n",
      " 'ipykernel.comm.comm': <module 'ipykernel.comm.comm' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/comm/comm.py'>,\n",
      " 'ipykernel.comm.manager': <module 'ipykernel.comm.manager' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/comm/manager.py'>,\n",
      " 'ipykernel.compiler': <module 'ipykernel.compiler' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/compiler.py'>,\n",
      " 'ipykernel.connect': <module 'ipykernel.connect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/connect.py'>,\n",
      " 'ipykernel.control': <module 'ipykernel.control' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/control.py'>,\n",
      " 'ipykernel.debugger': <module 'ipykernel.debugger' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/debugger.py'>,\n",
      " 'ipykernel.displayhook': <module 'ipykernel.displayhook' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/displayhook.py'>,\n",
      " 'ipykernel.eventloops': <module 'ipykernel.eventloops' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/eventloops.py'>,\n",
      " 'ipykernel.heartbeat': <module 'ipykernel.heartbeat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/heartbeat.py'>,\n",
      " 'ipykernel.iostream': <module 'ipykernel.iostream' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/iostream.py'>,\n",
      " 'ipykernel.ipkernel': <module 'ipykernel.ipkernel' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/ipkernel.py'>,\n",
      " 'ipykernel.jsonutil': <module 'ipykernel.jsonutil' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/jsonutil.py'>,\n",
      " 'ipykernel.kernelapp': <module 'ipykernel.kernelapp' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/kernelapp.py'>,\n",
      " 'ipykernel.kernelbase': <module 'ipykernel.kernelbase' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/kernelbase.py'>,\n",
      " 'ipykernel.parentpoller': <module 'ipykernel.parentpoller' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/parentpoller.py'>,\n",
      " 'ipykernel.zmqshell': <module 'ipykernel.zmqshell' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel/zmqshell.py'>,\n",
      " 'ipython_genutils': <module 'ipython_genutils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipython_genutils/__init__.py'>,\n",
      " 'ipython_genutils._version': <module 'ipython_genutils._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipython_genutils/_version.py'>,\n",
      " 'ipython_genutils.encoding': <module 'ipython_genutils.encoding' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipython_genutils/encoding.py'>,\n",
      " 'ipython_genutils.path': <module 'ipython_genutils.path' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipython_genutils/path.py'>,\n",
      " 'ipython_genutils.py3compat': <module 'ipython_genutils.py3compat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipython_genutils/py3compat.py'>,\n",
      " 'itertools': <module 'itertools' (built-in)>,\n",
      " 'jedi': <module 'jedi' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/__init__.py'>,\n",
      " 'jedi._compatibility': <module 'jedi._compatibility' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/_compatibility.py'>,\n",
      " 'jedi.api': <module 'jedi.api' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/__init__.py'>,\n",
      " 'jedi.api.classes': <module 'jedi.api.classes' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/classes.py'>,\n",
      " 'jedi.api.completion': <module 'jedi.api.completion' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/completion.py'>,\n",
      " 'jedi.api.completion_cache': <module 'jedi.api.completion_cache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/completion_cache.py'>,\n",
      " 'jedi.api.environment': <module 'jedi.api.environment' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/environment.py'>,\n",
      " 'jedi.api.errors': <module 'jedi.api.errors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/errors.py'>,\n",
      " 'jedi.api.exceptions': <module 'jedi.api.exceptions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/exceptions.py'>,\n",
      " 'jedi.api.file_name': <module 'jedi.api.file_name' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/file_name.py'>,\n",
      " 'jedi.api.helpers': <module 'jedi.api.helpers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/helpers.py'>,\n",
      " 'jedi.api.interpreter': <module 'jedi.api.interpreter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/interpreter.py'>,\n",
      " 'jedi.api.keywords': <module 'jedi.api.keywords' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/keywords.py'>,\n",
      " 'jedi.api.project': <module 'jedi.api.project' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/project.py'>,\n",
      " 'jedi.api.refactoring': <module 'jedi.api.refactoring' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/refactoring/__init__.py'>,\n",
      " 'jedi.api.refactoring.extract': <module 'jedi.api.refactoring.extract' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/refactoring/extract.py'>,\n",
      " 'jedi.api.strings': <module 'jedi.api.strings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/api/strings.py'>,\n",
      " 'jedi.cache': <module 'jedi.cache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/cache.py'>,\n",
      " 'jedi.common': <module 'jedi.common' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/common.py'>,\n",
      " 'jedi.debug': <module 'jedi.debug' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/debug.py'>,\n",
      " 'jedi.file_io': <module 'jedi.file_io' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/file_io.py'>,\n",
      " 'jedi.inference': <module 'jedi.inference' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/__init__.py'>,\n",
      " 'jedi.inference.analysis': <module 'jedi.inference.analysis' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/analysis.py'>,\n",
      " 'jedi.inference.arguments': <module 'jedi.inference.arguments' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/arguments.py'>,\n",
      " 'jedi.inference.base_value': <module 'jedi.inference.base_value' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/base_value.py'>,\n",
      " 'jedi.inference.cache': <module 'jedi.inference.cache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/cache.py'>,\n",
      " 'jedi.inference.compiled': <module 'jedi.inference.compiled' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/__init__.py'>,\n",
      " 'jedi.inference.compiled.access': <module 'jedi.inference.compiled.access' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/access.py'>,\n",
      " 'jedi.inference.compiled.getattr_static': <module 'jedi.inference.compiled.getattr_static' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/getattr_static.py'>,\n",
      " 'jedi.inference.compiled.mixed': <module 'jedi.inference.compiled.mixed' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/mixed.py'>,\n",
      " 'jedi.inference.compiled.subprocess': <module 'jedi.inference.compiled.subprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/subprocess/__init__.py'>,\n",
      " 'jedi.inference.compiled.subprocess.functions': <module 'jedi.inference.compiled.subprocess.functions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/subprocess/functions.py'>,\n",
      " 'jedi.inference.compiled.value': <module 'jedi.inference.compiled.value' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/compiled/value.py'>,\n",
      " 'jedi.inference.context': <module 'jedi.inference.context' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/context.py'>,\n",
      " 'jedi.inference.docstrings': <module 'jedi.inference.docstrings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/docstrings.py'>,\n",
      " 'jedi.inference.dynamic_params': <module 'jedi.inference.dynamic_params' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/dynamic_params.py'>,\n",
      " 'jedi.inference.filters': <module 'jedi.inference.filters' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/filters.py'>,\n",
      " 'jedi.inference.finder': <module 'jedi.inference.finder' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/finder.py'>,\n",
      " 'jedi.inference.flow_analysis': <module 'jedi.inference.flow_analysis' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/flow_analysis.py'>,\n",
      " 'jedi.inference.gradual': <module 'jedi.inference.gradual' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/__init__.py'>,\n",
      " 'jedi.inference.gradual.annotation': <module 'jedi.inference.gradual.annotation' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/annotation.py'>,\n",
      " 'jedi.inference.gradual.base': <module 'jedi.inference.gradual.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/base.py'>,\n",
      " 'jedi.inference.gradual.conversion': <module 'jedi.inference.gradual.conversion' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/conversion.py'>,\n",
      " 'jedi.inference.gradual.generics': <module 'jedi.inference.gradual.generics' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/generics.py'>,\n",
      " 'jedi.inference.gradual.stub_value': <module 'jedi.inference.gradual.stub_value' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/stub_value.py'>,\n",
      " 'jedi.inference.gradual.type_var': <module 'jedi.inference.gradual.type_var' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/type_var.py'>,\n",
      " 'jedi.inference.gradual.typeshed': <module 'jedi.inference.gradual.typeshed' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/typeshed.py'>,\n",
      " 'jedi.inference.gradual.typing': <module 'jedi.inference.gradual.typing' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/typing.py'>,\n",
      " 'jedi.inference.gradual.utils': <module 'jedi.inference.gradual.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/gradual/utils.py'>,\n",
      " 'jedi.inference.helpers': <module 'jedi.inference.helpers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/helpers.py'>,\n",
      " 'jedi.inference.imports': <module 'jedi.inference.imports' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/imports.py'>,\n",
      " 'jedi.inference.lazy_value': <module 'jedi.inference.lazy_value' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/lazy_value.py'>,\n",
      " 'jedi.inference.names': <module 'jedi.inference.names' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/names.py'>,\n",
      " 'jedi.inference.param': <module 'jedi.inference.param' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/param.py'>,\n",
      " 'jedi.inference.parser_cache': <module 'jedi.inference.parser_cache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/parser_cache.py'>,\n",
      " 'jedi.inference.recursion': <module 'jedi.inference.recursion' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/recursion.py'>,\n",
      " 'jedi.inference.references': <module 'jedi.inference.references' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/references.py'>,\n",
      " 'jedi.inference.signature': <module 'jedi.inference.signature' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/signature.py'>,\n",
      " 'jedi.inference.star_args': <module 'jedi.inference.star_args' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/star_args.py'>,\n",
      " 'jedi.inference.syntax_tree': <module 'jedi.inference.syntax_tree' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/syntax_tree.py'>,\n",
      " 'jedi.inference.sys_path': <module 'jedi.inference.sys_path' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/sys_path.py'>,\n",
      " 'jedi.inference.utils': <module 'jedi.inference.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/utils.py'>,\n",
      " 'jedi.inference.value': <module 'jedi.inference.value' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/__init__.py'>,\n",
      " 'jedi.inference.value.decorator': <module 'jedi.inference.value.decorator' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/decorator.py'>,\n",
      " 'jedi.inference.value.dynamic_arrays': <module 'jedi.inference.value.dynamic_arrays' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/dynamic_arrays.py'>,\n",
      " 'jedi.inference.value.function': <module 'jedi.inference.value.function' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/function.py'>,\n",
      " 'jedi.inference.value.instance': <module 'jedi.inference.value.instance' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/instance.py'>,\n",
      " 'jedi.inference.value.iterable': <module 'jedi.inference.value.iterable' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/iterable.py'>,\n",
      " 'jedi.inference.value.klass': <module 'jedi.inference.value.klass' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/klass.py'>,\n",
      " 'jedi.inference.value.module': <module 'jedi.inference.value.module' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/inference/value/module.py'>,\n",
      " 'jedi.parser_utils': <module 'jedi.parser_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/parser_utils.py'>,\n",
      " 'jedi.plugins': <module 'jedi.plugins' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/plugins/__init__.py'>,\n",
      " 'jedi.plugins.django': <module 'jedi.plugins.django' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/plugins/django.py'>,\n",
      " 'jedi.plugins.flask': <module 'jedi.plugins.flask' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/plugins/flask.py'>,\n",
      " 'jedi.plugins.pytest': <module 'jedi.plugins.pytest' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/plugins/pytest.py'>,\n",
      " 'jedi.plugins.registry': <module 'jedi.plugins.registry' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/plugins/registry.py'>,\n",
      " 'jedi.plugins.stdlib': <module 'jedi.plugins.stdlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/plugins/stdlib.py'>,\n",
      " 'jedi.settings': <module 'jedi.settings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jedi/settings.py'>,\n",
      " 'json': <module 'json' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/json/__init__.py'>,\n",
      " 'json.decoder': <module 'json.decoder' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/json/decoder.py'>,\n",
      " 'json.encoder': <module 'json.encoder' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/json/encoder.py'>,\n",
      " 'json.scanner': <module 'json.scanner' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/json/scanner.py'>,\n",
      " 'jupyter_client': <module 'jupyter_client' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/__init__.py'>,\n",
      " 'jupyter_client._version': <module 'jupyter_client._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/_version.py'>,\n",
      " 'jupyter_client.adapter': <module 'jupyter_client.adapter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/adapter.py'>,\n",
      " 'jupyter_client.asynchronous': <module 'jupyter_client.asynchronous' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/asynchronous/__init__.py'>,\n",
      " 'jupyter_client.asynchronous.channels': <module 'jupyter_client.asynchronous.channels' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/asynchronous/channels.py'>,\n",
      " 'jupyter_client.asynchronous.client': <module 'jupyter_client.asynchronous.client' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/asynchronous/client.py'>,\n",
      " 'jupyter_client.blocking': <module 'jupyter_client.blocking' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/blocking/__init__.py'>,\n",
      " 'jupyter_client.blocking.channels': <module 'jupyter_client.blocking.channels' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/blocking/channels.py'>,\n",
      " 'jupyter_client.blocking.client': <module 'jupyter_client.blocking.client' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/blocking/client.py'>,\n",
      " 'jupyter_client.channels': <module 'jupyter_client.channels' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/channels.py'>,\n",
      " 'jupyter_client.channelsabc': <module 'jupyter_client.channelsabc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/channelsabc.py'>,\n",
      " 'jupyter_client.client': <module 'jupyter_client.client' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/client.py'>,\n",
      " 'jupyter_client.clientabc': <module 'jupyter_client.clientabc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/clientabc.py'>,\n",
      " 'jupyter_client.connect': <module 'jupyter_client.connect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/connect.py'>,\n",
      " 'jupyter_client.jsonutil': <module 'jupyter_client.jsonutil' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/jsonutil.py'>,\n",
      " 'jupyter_client.kernelspec': <module 'jupyter_client.kernelspec' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/kernelspec.py'>,\n",
      " 'jupyter_client.launcher': <module 'jupyter_client.launcher' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/launcher.py'>,\n",
      " 'jupyter_client.localinterfaces': <module 'jupyter_client.localinterfaces' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/localinterfaces.py'>,\n",
      " 'jupyter_client.manager': <module 'jupyter_client.manager' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/manager.py'>,\n",
      " 'jupyter_client.managerabc': <module 'jupyter_client.managerabc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/managerabc.py'>,\n",
      " 'jupyter_client.multikernelmanager': <module 'jupyter_client.multikernelmanager' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/multikernelmanager.py'>,\n",
      " 'jupyter_client.session': <module 'jupyter_client.session' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/session.py'>,\n",
      " 'jupyter_client.utils': <module 'jupyter_client.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_client/utils.py'>,\n",
      " 'jupyter_core': <module 'jupyter_core' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_core/__init__.py'>,\n",
      " 'jupyter_core.paths': <module 'jupyter_core.paths' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_core/paths.py'>,\n",
      " 'jupyter_core.version': <module 'jupyter_core.version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/jupyter_core/version.py'>,\n",
      " 'keyword': <module 'keyword' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/keyword.py'>,\n",
      " 'linecache': <module 'linecache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/linecache.py'>,\n",
      " 'locale': <module 'locale' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/locale.py'>,\n",
      " 'logging': <module 'logging' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/logging/__init__.py'>,\n",
      " 'logging.handlers': <module 'logging.handlers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/logging/handlers.py'>,\n",
      " 'lzma': <module 'lzma' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lzma.py'>,\n",
      " 'marshal': <module 'marshal' (built-in)>,\n",
      " 'math': <module 'math' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/math.cpython-39-darwin.so'>,\n",
      " 'mimetypes': <module 'mimetypes' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/mimetypes.py'>,\n",
      " 'mpl_toolkits': <module 'mpl_toolkits' (namespace)>,\n",
      " 'ntpath': <module 'ntpath' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ntpath.py'>,\n",
      " 'numbers': <module 'numbers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/numbers.py'>,\n",
      " 'numpydoc': <module 'numpydoc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/numpydoc/__init__.py'>,\n",
      " 'numpydoc.docscrape': <module 'numpydoc.docscrape' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/numpydoc/docscrape.py'>,\n",
      " 'opcode': <module 'opcode' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/opcode.py'>,\n",
      " 'operator': <module 'operator' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/operator.py'>,\n",
      " 'os': <module 'os' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/os.py'>,\n",
      " 'os.path': <module 'posixpath' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/posixpath.py'>,\n",
      " 'parso': <module 'parso' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/__init__.py'>,\n",
      " 'parso._compatibility': <module 'parso._compatibility' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/_compatibility.py'>,\n",
      " 'parso.cache': <module 'parso.cache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/cache.py'>,\n",
      " 'parso.file_io': <module 'parso.file_io' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/file_io.py'>,\n",
      " 'parso.grammar': <module 'parso.grammar' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/grammar.py'>,\n",
      " 'parso.normalizer': <module 'parso.normalizer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/normalizer.py'>,\n",
      " 'parso.parser': <module 'parso.parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/parser.py'>,\n",
      " 'parso.pgen2': <module 'parso.pgen2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/pgen2/__init__.py'>,\n",
      " 'parso.pgen2.generator': <module 'parso.pgen2.generator' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/pgen2/generator.py'>,\n",
      " 'parso.pgen2.grammar_parser': <module 'parso.pgen2.grammar_parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/pgen2/grammar_parser.py'>,\n",
      " 'parso.python': <module 'parso.python' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/__init__.py'>,\n",
      " 'parso.python.diff': <module 'parso.python.diff' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/diff.py'>,\n",
      " 'parso.python.errors': <module 'parso.python.errors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/errors.py'>,\n",
      " 'parso.python.parser': <module 'parso.python.parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/parser.py'>,\n",
      " 'parso.python.pep8': <module 'parso.python.pep8' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/pep8.py'>,\n",
      " 'parso.python.prefix': <module 'parso.python.prefix' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/prefix.py'>,\n",
      " 'parso.python.token': <module 'parso.python.token' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/token.py'>,\n",
      " 'parso.python.tokenize': <module 'parso.python.tokenize' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/tokenize.py'>,\n",
      " 'parso.python.tree': <module 'parso.python.tree' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/python/tree.py'>,\n",
      " 'parso.tree': <module 'parso.tree' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/tree.py'>,\n",
      " 'parso.utils': <module 'parso.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/parso/utils.py'>,\n",
      " 'pathlib': <module 'pathlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pathlib.py'>,\n",
      " 'pdb': <module 'pdb' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pdb.py'>,\n",
      " 'pexpect': <module 'pexpect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/__init__.py'>,\n",
      " 'pexpect.exceptions': <module 'pexpect.exceptions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/exceptions.py'>,\n",
      " 'pexpect.expect': <module 'pexpect.expect' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/expect.py'>,\n",
      " 'pexpect.pty_spawn': <module 'pexpect.pty_spawn' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/pty_spawn.py'>,\n",
      " 'pexpect.run': <module 'pexpect.run' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/run.py'>,\n",
      " 'pexpect.spawnbase': <module 'pexpect.spawnbase' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/spawnbase.py'>,\n",
      " 'pexpect.utils': <module 'pexpect.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pexpect/utils.py'>,\n",
      " 'pickle': <module 'pickle' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pickle.py'>,\n",
      " 'pickleshare': <module 'pickleshare' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pickleshare.py'>,\n",
      " 'pkg_resources': <module 'pkg_resources' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/__init__.py'>,\n",
      " 'pkg_resources._vendor': <module 'pkg_resources._vendor' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/__init__.py'>,\n",
      " 'pkg_resources._vendor.appdirs': <module 'pkg_resources.extern.appdirs' (<pkg_resources.extern.VendorImporter object at 0x7fc4588fc3a0>)>,\n",
      " 'pkg_resources._vendor.packaging': <module 'pkg_resources.extern.packaging' (<pkg_resources.extern.VendorImporter object at 0x7fc4588fc3a0>)>,\n",
      " 'pkg_resources._vendor.packaging.__about__': <module 'pkg_resources._vendor.packaging.__about__' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/__about__.py'>,\n",
      " 'pkg_resources._vendor.pyparsing': <module 'pkg_resources.extern.pyparsing' (<pkg_resources.extern.VendorImporter object at 0x7fc4588fc3a0>)>,\n",
      " 'pkg_resources.extern': <module 'pkg_resources.extern' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/extern/__init__.py'>,\n",
      " 'pkg_resources.extern.appdirs': <module 'pkg_resources.extern.appdirs' (<pkg_resources.extern.VendorImporter object at 0x7fc4588fc3a0>)>,\n",
      " 'pkg_resources.extern.packaging': <module 'pkg_resources.extern.packaging' (<pkg_resources.extern.VendorImporter object at 0x7fc4588fc3a0>)>,\n",
      " 'pkg_resources.extern.packaging._compat': <module 'pkg_resources.extern.packaging._compat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_compat.py'>,\n",
      " 'pkg_resources.extern.packaging._structures': <module 'pkg_resources.extern.packaging._structures' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_structures.py'>,\n",
      " 'pkg_resources.extern.packaging._typing': <module 'pkg_resources.extern.packaging._typing' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/_typing.py'>,\n",
      " 'pkg_resources.extern.packaging.markers': <module 'pkg_resources.extern.packaging.markers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py'>,\n",
      " 'pkg_resources.extern.packaging.requirements': <module 'pkg_resources.extern.packaging.requirements' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/requirements.py'>,\n",
      " 'pkg_resources.extern.packaging.specifiers': <module 'pkg_resources.extern.packaging.specifiers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/specifiers.py'>,\n",
      " 'pkg_resources.extern.packaging.utils': <module 'pkg_resources.extern.packaging.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/utils.py'>,\n",
      " 'pkg_resources.extern.packaging.version': <module 'pkg_resources.extern.packaging.version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py'>,\n",
      " 'pkg_resources.extern.pyparsing': <module 'pkg_resources.extern.pyparsing' (<pkg_resources.extern.VendorImporter object at 0x7fc4588fc3a0>)>,\n",
      " 'pkgutil': <module 'pkgutil' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pkgutil.py'>,\n",
      " 'platform': <module 'platform' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/platform.py'>,\n",
      " 'plistlib': <module 'plistlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/plistlib.py'>,\n",
      " 'posix': <module 'posix' (built-in)>,\n",
      " 'posixpath': <module 'posixpath' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/posixpath.py'>,\n",
      " 'pprint': <module 'pprint' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pprint.py'>,\n",
      " 'profile': <module 'profile' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/profile.py'>,\n",
      " 'prompt_toolkit': <module 'prompt_toolkit' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/__init__.py'>,\n",
      " 'prompt_toolkit.application': <module 'prompt_toolkit.application' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/application/__init__.py'>,\n",
      " 'prompt_toolkit.application.application': <module 'prompt_toolkit.application.application' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/application/application.py'>,\n",
      " 'prompt_toolkit.application.current': <module 'prompt_toolkit.application.current' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/application/current.py'>,\n",
      " 'prompt_toolkit.application.dummy': <module 'prompt_toolkit.application.dummy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/application/dummy.py'>,\n",
      " 'prompt_toolkit.application.run_in_terminal': <module 'prompt_toolkit.application.run_in_terminal' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/application/run_in_terminal.py'>,\n",
      " 'prompt_toolkit.auto_suggest': <module 'prompt_toolkit.auto_suggest' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/auto_suggest.py'>,\n",
      " 'prompt_toolkit.buffer': <module 'prompt_toolkit.buffer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/buffer.py'>,\n",
      " 'prompt_toolkit.cache': <module 'prompt_toolkit.cache' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/cache.py'>,\n",
      " 'prompt_toolkit.clipboard': <module 'prompt_toolkit.clipboard' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/clipboard/__init__.py'>,\n",
      " 'prompt_toolkit.clipboard.base': <module 'prompt_toolkit.clipboard.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/clipboard/base.py'>,\n",
      " 'prompt_toolkit.clipboard.in_memory': <module 'prompt_toolkit.clipboard.in_memory' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/clipboard/in_memory.py'>,\n",
      " 'prompt_toolkit.completion': <module 'prompt_toolkit.completion' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/__init__.py'>,\n",
      " 'prompt_toolkit.completion.base': <module 'prompt_toolkit.completion.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/base.py'>,\n",
      " 'prompt_toolkit.completion.deduplicate': <module 'prompt_toolkit.completion.deduplicate' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/deduplicate.py'>,\n",
      " 'prompt_toolkit.completion.filesystem': <module 'prompt_toolkit.completion.filesystem' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/filesystem.py'>,\n",
      " 'prompt_toolkit.completion.fuzzy_completer': <module 'prompt_toolkit.completion.fuzzy_completer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/fuzzy_completer.py'>,\n",
      " 'prompt_toolkit.completion.nested': <module 'prompt_toolkit.completion.nested' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/nested.py'>,\n",
      " 'prompt_toolkit.completion.word_completer': <module 'prompt_toolkit.completion.word_completer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/completion/word_completer.py'>,\n",
      " 'prompt_toolkit.data_structures': <module 'prompt_toolkit.data_structures' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/data_structures.py'>,\n",
      " 'prompt_toolkit.document': <module 'prompt_toolkit.document' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/document.py'>,\n",
      " 'prompt_toolkit.enums': <module 'prompt_toolkit.enums' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/enums.py'>,\n",
      " 'prompt_toolkit.eventloop': <module 'prompt_toolkit.eventloop' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/eventloop/__init__.py'>,\n",
      " 'prompt_toolkit.eventloop.async_generator': <module 'prompt_toolkit.eventloop.async_generator' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/eventloop/async_generator.py'>,\n",
      " 'prompt_toolkit.eventloop.inputhook': <module 'prompt_toolkit.eventloop.inputhook' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/eventloop/inputhook.py'>,\n",
      " 'prompt_toolkit.eventloop.utils': <module 'prompt_toolkit.eventloop.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/eventloop/utils.py'>,\n",
      " 'prompt_toolkit.filters': <module 'prompt_toolkit.filters' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/filters/__init__.py'>,\n",
      " 'prompt_toolkit.filters.app': <module 'prompt_toolkit.filters.app' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/filters/app.py'>,\n",
      " 'prompt_toolkit.filters.base': <module 'prompt_toolkit.filters.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/filters/base.py'>,\n",
      " 'prompt_toolkit.filters.cli': <module 'prompt_toolkit.filters.cli' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/filters/cli.py'>,\n",
      " 'prompt_toolkit.filters.utils': <module 'prompt_toolkit.filters.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/filters/utils.py'>,\n",
      " 'prompt_toolkit.formatted_text': <module 'prompt_toolkit.formatted_text' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/formatted_text/__init__.py'>,\n",
      " 'prompt_toolkit.formatted_text.ansi': <module 'prompt_toolkit.formatted_text.ansi' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/formatted_text/ansi.py'>,\n",
      " 'prompt_toolkit.formatted_text.base': <module 'prompt_toolkit.formatted_text.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/formatted_text/base.py'>,\n",
      " 'prompt_toolkit.formatted_text.html': <module 'prompt_toolkit.formatted_text.html' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/formatted_text/html.py'>,\n",
      " 'prompt_toolkit.formatted_text.pygments': <module 'prompt_toolkit.formatted_text.pygments' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/formatted_text/pygments.py'>,\n",
      " 'prompt_toolkit.formatted_text.utils': <module 'prompt_toolkit.formatted_text.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/formatted_text/utils.py'>,\n",
      " 'prompt_toolkit.history': <module 'prompt_toolkit.history' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/history.py'>,\n",
      " 'prompt_toolkit.input': <module 'prompt_toolkit.input' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/input/__init__.py'>,\n",
      " 'prompt_toolkit.input.ansi_escape_sequences': <module 'prompt_toolkit.input.ansi_escape_sequences' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/input/ansi_escape_sequences.py'>,\n",
      " 'prompt_toolkit.input.base': <module 'prompt_toolkit.input.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/input/base.py'>,\n",
      " 'prompt_toolkit.input.defaults': <module 'prompt_toolkit.input.defaults' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/input/defaults.py'>,\n",
      " 'prompt_toolkit.input.typeahead': <module 'prompt_toolkit.input.typeahead' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/input/typeahead.py'>,\n",
      " 'prompt_toolkit.input.vt100_parser': <module 'prompt_toolkit.input.vt100_parser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/input/vt100_parser.py'>,\n",
      " 'prompt_toolkit.key_binding': <module 'prompt_toolkit.key_binding' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/__init__.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings': <module 'prompt_toolkit.key_binding.bindings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/__init__.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.auto_suggest': <module 'prompt_toolkit.key_binding.bindings.auto_suggest' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/auto_suggest.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.basic': <module 'prompt_toolkit.key_binding.bindings.basic' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/basic.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.completion': <module 'prompt_toolkit.key_binding.bindings.completion' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/completion.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.cpr': <module 'prompt_toolkit.key_binding.bindings.cpr' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/cpr.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.emacs': <module 'prompt_toolkit.key_binding.bindings.emacs' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/emacs.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.focus': <module 'prompt_toolkit.key_binding.bindings.focus' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/focus.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.mouse': <module 'prompt_toolkit.key_binding.bindings.mouse' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/mouse.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.named_commands': <module 'prompt_toolkit.key_binding.bindings.named_commands' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/named_commands.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.open_in_editor': <module 'prompt_toolkit.key_binding.bindings.open_in_editor' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/open_in_editor.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.page_navigation': <module 'prompt_toolkit.key_binding.bindings.page_navigation' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/page_navigation.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.scroll': <module 'prompt_toolkit.key_binding.bindings.scroll' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/scroll.py'>,\n",
      " 'prompt_toolkit.key_binding.bindings.vi': <module 'prompt_toolkit.key_binding.bindings.vi' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/bindings/vi.py'>,\n",
      " 'prompt_toolkit.key_binding.defaults': <module 'prompt_toolkit.key_binding.defaults' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/defaults.py'>,\n",
      " 'prompt_toolkit.key_binding.digraphs': <module 'prompt_toolkit.key_binding.digraphs' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/digraphs.py'>,\n",
      " 'prompt_toolkit.key_binding.emacs_state': <module 'prompt_toolkit.key_binding.emacs_state' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/emacs_state.py'>,\n",
      " 'prompt_toolkit.key_binding.key_bindings': <module 'prompt_toolkit.key_binding.key_bindings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_bindings.py'>,\n",
      " 'prompt_toolkit.key_binding.key_processor': <module 'prompt_toolkit.key_binding.key_processor' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/key_processor.py'>,\n",
      " 'prompt_toolkit.key_binding.vi_state': <module 'prompt_toolkit.key_binding.vi_state' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/key_binding/vi_state.py'>,\n",
      " 'prompt_toolkit.keys': <module 'prompt_toolkit.keys' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/keys.py'>,\n",
      " 'prompt_toolkit.layout': <module 'prompt_toolkit.layout' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/__init__.py'>,\n",
      " 'prompt_toolkit.layout.containers': <module 'prompt_toolkit.layout.containers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/containers.py'>,\n",
      " 'prompt_toolkit.layout.controls': <module 'prompt_toolkit.layout.controls' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/controls.py'>,\n",
      " 'prompt_toolkit.layout.dimension': <module 'prompt_toolkit.layout.dimension' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/dimension.py'>,\n",
      " 'prompt_toolkit.layout.dummy': <module 'prompt_toolkit.layout.dummy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/dummy.py'>,\n",
      " 'prompt_toolkit.layout.layout': <module 'prompt_toolkit.layout.layout' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/layout.py'>,\n",
      " 'prompt_toolkit.layout.margins': <module 'prompt_toolkit.layout.margins' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/margins.py'>,\n",
      " 'prompt_toolkit.layout.menus': <module 'prompt_toolkit.layout.menus' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/menus.py'>,\n",
      " 'prompt_toolkit.layout.mouse_handlers': <module 'prompt_toolkit.layout.mouse_handlers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/mouse_handlers.py'>,\n",
      " 'prompt_toolkit.layout.processors': <module 'prompt_toolkit.layout.processors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/processors.py'>,\n",
      " 'prompt_toolkit.layout.screen': <module 'prompt_toolkit.layout.screen' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/screen.py'>,\n",
      " 'prompt_toolkit.layout.scrollable_pane': <module 'prompt_toolkit.layout.scrollable_pane' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/scrollable_pane.py'>,\n",
      " 'prompt_toolkit.layout.utils': <module 'prompt_toolkit.layout.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/layout/utils.py'>,\n",
      " 'prompt_toolkit.lexers': <module 'prompt_toolkit.lexers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/lexers/__init__.py'>,\n",
      " 'prompt_toolkit.lexers.base': <module 'prompt_toolkit.lexers.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/lexers/base.py'>,\n",
      " 'prompt_toolkit.lexers.pygments': <module 'prompt_toolkit.lexers.pygments' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/lexers/pygments.py'>,\n",
      " 'prompt_toolkit.mouse_events': <module 'prompt_toolkit.mouse_events' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/mouse_events.py'>,\n",
      " 'prompt_toolkit.output': <module 'prompt_toolkit.output' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/output/__init__.py'>,\n",
      " 'prompt_toolkit.output.base': <module 'prompt_toolkit.output.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/output/base.py'>,\n",
      " 'prompt_toolkit.output.color_depth': <module 'prompt_toolkit.output.color_depth' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/output/color_depth.py'>,\n",
      " 'prompt_toolkit.output.defaults': <module 'prompt_toolkit.output.defaults' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/output/defaults.py'>,\n",
      " 'prompt_toolkit.output.vt100': <module 'prompt_toolkit.output.vt100' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/output/vt100.py'>,\n",
      " 'prompt_toolkit.patch_stdout': <module 'prompt_toolkit.patch_stdout' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/patch_stdout.py'>,\n",
      " 'prompt_toolkit.renderer': <module 'prompt_toolkit.renderer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/renderer.py'>,\n",
      " 'prompt_toolkit.search': <module 'prompt_toolkit.search' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/search.py'>,\n",
      " 'prompt_toolkit.selection': <module 'prompt_toolkit.selection' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/selection.py'>,\n",
      " 'prompt_toolkit.shortcuts': <module 'prompt_toolkit.shortcuts' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/__init__.py'>,\n",
      " 'prompt_toolkit.shortcuts.dialogs': <module 'prompt_toolkit.shortcuts.dialogs' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/dialogs.py'>,\n",
      " 'prompt_toolkit.shortcuts.progress_bar': <module 'prompt_toolkit.shortcuts.progress_bar' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/progress_bar/__init__.py'>,\n",
      " 'prompt_toolkit.shortcuts.progress_bar.base': <module 'prompt_toolkit.shortcuts.progress_bar.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/progress_bar/base.py'>,\n",
      " 'prompt_toolkit.shortcuts.progress_bar.formatters': <module 'prompt_toolkit.shortcuts.progress_bar.formatters' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/progress_bar/formatters.py'>,\n",
      " 'prompt_toolkit.shortcuts.prompt': <module 'prompt_toolkit.shortcuts.prompt' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/prompt.py'>,\n",
      " 'prompt_toolkit.shortcuts.utils': <module 'prompt_toolkit.shortcuts.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/shortcuts/utils.py'>,\n",
      " 'prompt_toolkit.styles': <module 'prompt_toolkit.styles' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/__init__.py'>,\n",
      " 'prompt_toolkit.styles.base': <module 'prompt_toolkit.styles.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/base.py'>,\n",
      " 'prompt_toolkit.styles.defaults': <module 'prompt_toolkit.styles.defaults' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/defaults.py'>,\n",
      " 'prompt_toolkit.styles.named_colors': <module 'prompt_toolkit.styles.named_colors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/named_colors.py'>,\n",
      " 'prompt_toolkit.styles.pygments': <module 'prompt_toolkit.styles.pygments' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/pygments.py'>,\n",
      " 'prompt_toolkit.styles.style': <module 'prompt_toolkit.styles.style' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/style.py'>,\n",
      " 'prompt_toolkit.styles.style_transformation': <module 'prompt_toolkit.styles.style_transformation' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/styles/style_transformation.py'>,\n",
      " 'prompt_toolkit.utils': <module 'prompt_toolkit.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/utils.py'>,\n",
      " 'prompt_toolkit.validation': <module 'prompt_toolkit.validation' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/validation.py'>,\n",
      " 'prompt_toolkit.widgets': <module 'prompt_toolkit.widgets' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/widgets/__init__.py'>,\n",
      " 'prompt_toolkit.widgets.base': <module 'prompt_toolkit.widgets.base' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/widgets/base.py'>,\n",
      " 'prompt_toolkit.widgets.dialogs': <module 'prompt_toolkit.widgets.dialogs' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/widgets/dialogs.py'>,\n",
      " 'prompt_toolkit.widgets.menus': <module 'prompt_toolkit.widgets.menus' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/widgets/menus.py'>,\n",
      " 'prompt_toolkit.widgets.toolbars': <module 'prompt_toolkit.widgets.toolbars' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/prompt_toolkit/widgets/toolbars.py'>,\n",
      " 'pstats': <module 'pstats' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pstats.py'>,\n",
      " 'pty': <module 'pty' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pty.py'>,\n",
      " 'ptyprocess': <module 'ptyprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ptyprocess/__init__.py'>,\n",
      " 'ptyprocess.ptyprocess': <module 'ptyprocess.ptyprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ptyprocess/ptyprocess.py'>,\n",
      " 'ptyprocess.util': <module 'ptyprocess.util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ptyprocess/util.py'>,\n",
      " 'pwd': <module 'pwd' (built-in)>,\n",
      " 'pydev_ipython': <module 'pydev_ipython' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydev_ipython/__init__.py'>,\n",
      " 'pydevconsole': <module 'pydevconsole' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevconsole.py'>,\n",
      " 'pydevd': <module 'pydevd' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd.py'>,\n",
      " 'pydevd_concurrency_analyser': <module 'pydevd_concurrency_analyser' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_concurrency_analyser/__init__.py'>,\n",
      " 'pydevd_concurrency_analyser.pydevd_concurrency_logger': <module 'pydevd_concurrency_analyser.pydevd_concurrency_logger' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_concurrency_analyser/pydevd_concurrency_logger.py'>,\n",
      " 'pydevd_concurrency_analyser.pydevd_thread_wrappers': <module 'pydevd_concurrency_analyser.pydevd_thread_wrappers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_concurrency_analyser/pydevd_thread_wrappers.py'>,\n",
      " 'pydevd_file_utils': <module 'pydevd_file_utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_file_utils.py'>,\n",
      " 'pydevd_plugins': <module 'pydevd_plugins' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py'>,\n",
      " 'pydevd_plugins.django_debug': <module 'pydevd_plugins.django_debug' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py'>,\n",
      " 'pydevd_plugins.extensions': <module 'pydevd_plugins.extensions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py'>,\n",
      " 'pydevd_plugins.extensions.types': <module 'pydevd_plugins.extensions.types' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py'>,\n",
      " 'pydevd_plugins.extensions.types.pydevd_helpers': <module 'pydevd_plugins.extensions.types.pydevd_helpers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py'>,\n",
      " 'pydevd_plugins.extensions.types.pydevd_plugin_numpy_types': <module 'pydevd_plugins.extensions.types.pydevd_plugin_numpy_types' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py'>,\n",
      " 'pydevd_plugins.extensions.types.pydevd_plugins_django_form_str': <module 'pydevd_plugins.extensions.types.pydevd_plugins_django_form_str' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py'>,\n",
      " 'pydevd_plugins.jinja2_debug': <module 'pydevd_plugins.jinja2_debug' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py'>,\n",
      " 'pydevd_tracing': <module 'pydevd_tracing' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/debugpy/_vendored/pydevd/pydevd_tracing.py'>,\n",
      " 'pydoc': <module 'pydoc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pydoc.py'>,\n",
      " 'pydoc_data': <module 'pydoc_data' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pydoc_data/__init__.py'>,\n",
      " 'pydoc_data.topics': <module 'pydoc_data.topics' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/pydoc_data/topics.py'>,\n",
      " 'pyexpat': <module 'pyexpat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/pyexpat.cpython-39-darwin.so'>,\n",
      " 'pyexpat.errors': <module 'pyexpat.errors'>,\n",
      " 'pyexpat.model': <module 'pyexpat.model'>,\n",
      " 'pygments': <module 'pygments' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/__init__.py'>,\n",
      " 'pygments.filter': <module 'pygments.filter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/filter.py'>,\n",
      " 'pygments.filters': <module 'pygments.filters' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/filters/__init__.py'>,\n",
      " 'pygments.formatter': <module 'pygments.formatter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/formatter.py'>,\n",
      " 'pygments.formatters': <module 'pygments.formatters' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/formatters/__init__.py'>,\n",
      " 'pygments.formatters._mapping': <module 'pygments.formatters._mapping' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/formatters/_mapping.py'>,\n",
      " 'pygments.formatters.html': <module 'pygments.formatters.html' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/formatters/html.py'>,\n",
      " 'pygments.lexer': <module 'pygments.lexer' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/lexer.py'>,\n",
      " 'pygments.lexers': <module 'pygments.lexers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/lexers/__init__.py'>,\n",
      " 'pygments.lexers._mapping': <module 'pygments.lexers._mapping' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/lexers/_mapping.py'>,\n",
      " 'pygments.lexers.python': <module 'pygments.lexers.python' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/lexers/python.py'>,\n",
      " 'pygments.modeline': <module 'pygments.modeline' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/modeline.py'>,\n",
      " 'pygments.plugin': <module 'pygments.plugin' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/plugin.py'>,\n",
      " 'pygments.regexopt': <module 'pygments.regexopt' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/regexopt.py'>,\n",
      " 'pygments.style': <module 'pygments.style' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/style.py'>,\n",
      " 'pygments.styles': <module 'pygments.styles' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/styles/__init__.py'>,\n",
      " 'pygments.styles.default': <module 'pygments.styles.default' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/styles/default.py'>,\n",
      " 'pygments.token': <module 'pygments.token' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/token.py'>,\n",
      " 'pygments.unistring': <module 'pygments.unistring' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/unistring.py'>,\n",
      " 'pygments.util': <module 'pygments.util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/pygments/util.py'>,\n",
      " 'queue': <module 'queue' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/queue.py'>,\n",
      " 'quopri': <module 'quopri' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/quopri.py'>,\n",
      " 'random': <module 'random' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/random.py'>,\n",
      " 're': <module 're' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/re.py'>,\n",
      " 'reprlib': <module 'reprlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/reprlib.py'>,\n",
      " 'resource': <module 'resource' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/resource.cpython-39-darwin.so'>,\n",
      " 'runpy': <module 'runpy' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/runpy.py'>,\n",
      " 'select': <module 'select' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/select.cpython-39-darwin.so'>,\n",
      " 'selectors': <module 'selectors' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/selectors.py'>,\n",
      " 'shlex': <module 'shlex' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/shlex.py'>,\n",
      " 'shutil': <module 'shutil' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/shutil.py'>,\n",
      " 'signal': <module 'signal' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/signal.py'>,\n",
      " 'site': <module 'site' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site.py'>,\n",
      " 'six': <module 'six' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/six.py'>,\n",
      " 'six.moves': <module 'six.moves' (<six._SixMetaPathImporter object at 0x7fc48834e430>)>,\n",
      " 'socket': <module 'socket' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/socket.py'>,\n",
      " 'socketserver': <module 'socketserver' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/socketserver.py'>,\n",
      " 'sphinxcontrib': <module 'sphinxcontrib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/sphinxcontrib/__init__.py'>,\n",
      " 'sqlite3': <module 'sqlite3' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/sqlite3/__init__.py'>,\n",
      " 'sqlite3.dbapi2': <module 'sqlite3.dbapi2' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/sqlite3/dbapi2.py'>,\n",
      " 'sre_compile': <module 'sre_compile' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/sre_compile.py'>,\n",
      " 'sre_constants': <module 'sre_constants' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/sre_constants.py'>,\n",
      " 'sre_parse': <module 'sre_parse' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/sre_parse.py'>,\n",
      " 'ssl': <module 'ssl' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/ssl.py'>,\n",
      " 'stat': <module 'stat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/stat.py'>,\n",
      " 'storemagic': <module 'storemagic' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/IPython/extensions/storemagic.py'>,\n",
      " 'string': <module 'string' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/string.py'>,\n",
      " 'stringprep': <module 'stringprep' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/stringprep.py'>,\n",
      " 'struct': <module 'struct' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/struct.py'>,\n",
      " 'subprocess': <module 'subprocess' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/subprocess.py'>,\n",
      " 'sys': <module 'sys' (built-in)>,\n",
      " 'sysconfig': <module 'sysconfig' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/sysconfig.py'>,\n",
      " 'tempfile': <module 'tempfile' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/tempfile.py'>,\n",
      " 'termios': <module 'termios' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/termios.cpython-39-darwin.so'>,\n",
      " 'textwrap': <module 'textwrap' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/textwrap.py'>,\n",
      " 'threading': <module 'threading' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/threading.py'>,\n",
      " 'time': <module 'time' (built-in)>,\n",
      " 'timeit': <module 'timeit' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/timeit.py'>,\n",
      " 'token': <module 'token' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/token.py'>,\n",
      " 'tokenize': <module 'tokenize' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/tokenize.py'>,\n",
      " 'tornado': <module 'tornado' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/__init__.py'>,\n",
      " 'tornado.concurrent': <module 'tornado.concurrent' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/concurrent.py'>,\n",
      " 'tornado.escape': <module 'tornado.escape' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/escape.py'>,\n",
      " 'tornado.gen': <module 'tornado.gen' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/gen.py'>,\n",
      " 'tornado.ioloop': <module 'tornado.ioloop' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/ioloop.py'>,\n",
      " 'tornado.locks': <module 'tornado.locks' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/locks.py'>,\n",
      " 'tornado.log': <module 'tornado.log' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/log.py'>,\n",
      " 'tornado.platform': <module 'tornado.platform' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/platform/__init__.py'>,\n",
      " 'tornado.platform.asyncio': <module 'tornado.platform.asyncio' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/platform/asyncio.py'>,\n",
      " 'tornado.queues': <module 'tornado.queues' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/queues.py'>,\n",
      " 'tornado.speedups': <module 'tornado.speedups' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/speedups.cpython-39-darwin.so'>,\n",
      " 'tornado.util': <module 'tornado.util' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/tornado/util.py'>,\n",
      " 'traceback': <module 'traceback' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/traceback.py'>,\n",
      " 'traitlets': <module 'traitlets' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/__init__.py'>,\n",
      " 'traitlets._version': <module 'traitlets._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/_version.py'>,\n",
      " 'traitlets.config': <module 'traitlets.config' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/config/__init__.py'>,\n",
      " 'traitlets.config.application': <module 'traitlets.config.application' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/config/application.py'>,\n",
      " 'traitlets.config.configurable': <module 'traitlets.config.configurable' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/config/configurable.py'>,\n",
      " 'traitlets.config.loader': <module 'traitlets.config.loader' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/config/loader.py'>,\n",
      " 'traitlets.log': <module 'traitlets.log' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/log.py'>,\n",
      " 'traitlets.traitlets': <module 'traitlets.traitlets' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/traitlets.py'>,\n",
      " 'traitlets.utils': <module 'traitlets.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/__init__.py'>,\n",
      " 'traitlets.utils.bunch': <module 'traitlets.utils.bunch' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/bunch.py'>,\n",
      " 'traitlets.utils.decorators': <module 'traitlets.utils.decorators' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/decorators.py'>,\n",
      " 'traitlets.utils.descriptions': <module 'traitlets.utils.descriptions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/descriptions.py'>,\n",
      " 'traitlets.utils.getargspec': <module 'traitlets.utils.getargspec' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/getargspec.py'>,\n",
      " 'traitlets.utils.importstring': <module 'traitlets.utils.importstring' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/importstring.py'>,\n",
      " 'traitlets.utils.sentinel': <module 'traitlets.utils.sentinel' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/sentinel.py'>,\n",
      " 'traitlets.utils.text': <module 'traitlets.utils.text' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/traitlets/utils/text.py'>,\n",
      " 'tty': <module 'tty' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/tty.py'>,\n",
      " 'types': <module 'types' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/types.py'>,\n",
      " 'typing': <module 'typing' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/typing.py'>,\n",
      " 'typing.io': <class 'typing.io'>,\n",
      " 'typing.re': <class 'typing.re'>,\n",
      " 'unicodedata': <module 'unicodedata' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/unicodedata.cpython-39-darwin.so'>,\n",
      " 'urllib': <module 'urllib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/urllib/__init__.py'>,\n",
      " 'urllib.error': <module 'urllib.error' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/urllib/error.py'>,\n",
      " 'urllib.parse': <module 'urllib.parse' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/urllib/parse.py'>,\n",
      " 'urllib.request': <module 'urllib.request' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/urllib/request.py'>,\n",
      " 'urllib.response': <module 'urllib.response' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/urllib/response.py'>,\n",
      " 'uu': <module 'uu' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/uu.py'>,\n",
      " 'uuid': <module 'uuid' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/uuid.py'>,\n",
      " 'warnings': <module 'warnings' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/warnings.py'>,\n",
      " 'wcwidth': <module 'wcwidth' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/wcwidth/__init__.py'>,\n",
      " 'wcwidth.table_wide': <module 'wcwidth.table_wide' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/wcwidth/table_wide.py'>,\n",
      " 'wcwidth.table_zero': <module 'wcwidth.table_zero' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/wcwidth/table_zero.py'>,\n",
      " 'wcwidth.unicode_versions': <module 'wcwidth.unicode_versions' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/wcwidth/unicode_versions.py'>,\n",
      " 'wcwidth.wcwidth': <module 'wcwidth.wcwidth' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/wcwidth/wcwidth.py'>,\n",
      " 'weakref': <module 'weakref' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/weakref.py'>,\n",
      " 'xml': <module 'xml' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/__init__.py'>,\n",
      " 'xml.dom': <module 'xml.dom' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/dom/__init__.py'>,\n",
      " 'xml.dom.NodeFilter': <module 'xml.dom.NodeFilter' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/dom/NodeFilter.py'>,\n",
      " 'xml.dom.domreg': <module 'xml.dom.domreg' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/dom/domreg.py'>,\n",
      " 'xml.dom.minicompat': <module 'xml.dom.minicompat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/dom/minicompat.py'>,\n",
      " 'xml.dom.minidom': <module 'xml.dom.minidom' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/dom/minidom.py'>,\n",
      " 'xml.dom.xmlbuilder': <module 'xml.dom.xmlbuilder' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/dom/xmlbuilder.py'>,\n",
      " 'xml.parsers': <module 'xml.parsers' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/parsers/__init__.py'>,\n",
      " 'xml.parsers.expat': <module 'xml.parsers.expat' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xml/parsers/expat.py'>,\n",
      " 'xml.parsers.expat.errors': <module 'pyexpat.errors'>,\n",
      " 'xml.parsers.expat.model': <module 'pyexpat.model'>,\n",
      " 'xmlrpc': <module 'xmlrpc' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xmlrpc/__init__.py'>,\n",
      " 'xmlrpc.client': <module 'xmlrpc.client' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xmlrpc/client.py'>,\n",
      " 'xmlrpc.server': <module 'xmlrpc.server' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/xmlrpc/server.py'>,\n",
      " 'zipfile': <module 'zipfile' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/zipfile.py'>,\n",
      " 'zipimport': <module 'zipimport' (frozen)>,\n",
      " 'zlib': <module 'zlib' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/lib-dynload/zlib.cpython-39-darwin.so'>,\n",
      " 'zmq': <module 'zmq' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/__init__.py'>,\n",
      " 'zmq._future': <module 'zmq._future' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/_future.py'>,\n",
      " 'zmq.asyncio': <module 'zmq.asyncio' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/asyncio.py'>,\n",
      " 'zmq.backend': <module 'zmq.backend' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/__init__.py'>,\n",
      " 'zmq.backend.cython': <module 'zmq.backend.cython' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/__init__.py'>,\n",
      " 'zmq.backend.cython._device': <module 'zmq.backend.cython._device' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/_device.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython._poll': <module 'zmq.backend.cython._poll' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/_poll.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython._proxy_steerable': <module 'zmq.backend.cython._proxy_steerable' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/_proxy_steerable.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython._version': <module 'zmq.backend.cython._version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/_version.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython.constants': <module 'zmq.backend.cython.constants' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/constants.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython.context': <module 'zmq.backend.cython.context' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/context.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython.error': <module 'zmq.backend.cython.error' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/error.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython.message': <module 'zmq.backend.cython.message' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/message.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython.socket': <module 'zmq.backend.cython.socket' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/socket.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.cython.utils': <module 'zmq.backend.cython.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/cython/utils.cpython-39-darwin.so'>,\n",
      " 'zmq.backend.select': <module 'zmq.backend.select' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/backend/select.py'>,\n",
      " 'zmq.error': <module 'zmq.error' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/error.py'>,\n",
      " 'zmq.eventloop': <module 'zmq.eventloop' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/eventloop/__init__.py'>,\n",
      " 'zmq.eventloop.ioloop': <module 'zmq.eventloop.ioloop' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/eventloop/ioloop.py'>,\n",
      " 'zmq.eventloop.zmqstream': <module 'zmq.eventloop.zmqstream' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/eventloop/zmqstream.py'>,\n",
      " 'zmq.sugar': <module 'zmq.sugar' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/__init__.py'>,\n",
      " 'zmq.sugar.attrsettr': <module 'zmq.sugar.attrsettr' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/attrsettr.py'>,\n",
      " 'zmq.sugar.constants': <module 'zmq.sugar.constants' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/constants.py'>,\n",
      " 'zmq.sugar.context': <module 'zmq.sugar.context' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/context.py'>,\n",
      " 'zmq.sugar.frame': <module 'zmq.sugar.frame' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/frame.py'>,\n",
      " 'zmq.sugar.poll': <module 'zmq.sugar.poll' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/poll.py'>,\n",
      " 'zmq.sugar.socket': <module 'zmq.sugar.socket' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/socket.py'>,\n",
      " 'zmq.sugar.stopwatch': <module 'zmq.sugar.stopwatch' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/stopwatch.py'>,\n",
      " 'zmq.sugar.tracker': <module 'zmq.sugar.tracker' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/tracker.py'>,\n",
      " 'zmq.sugar.version': <module 'zmq.sugar.version' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/sugar/version.py'>,\n",
      " 'zmq.utils': <module 'zmq.utils' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/utils/__init__.py'>,\n",
      " 'zmq.utils.constant_names': <module 'zmq.utils.constant_names' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/utils/constant_names.py'>,\n",
      " 'zmq.utils.garbage': <module 'zmq.utils.garbage' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/utils/garbage.py'>,\n",
      " 'zmq.utils.jsonapi': <module 'zmq.utils.jsonapi' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/utils/jsonapi.py'>,\n",
      " 'zmq.utils.strtypes': <module 'zmq.utils.strtypes' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zmq/utils/strtypes.py'>,\n",
      " 'zope': <module 'zope' from '/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/zope/__init__.py'>}\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "import pprint\n",
    "\n",
    "pprint.pprint(sys.modules)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "id": "1da740ef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'darwin'"
      ]
     },
     "execution_count": 222,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sys.platform"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "id": "e8d321db",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel_launcher.py',\n",
      " '-f',\n",
      " '/Users/collinsliu/Library/Jupyter/runtime/kernel-e00ed420-c56c-49f9-9cf3-bdadbd565737.json']\n"
     ]
    }
   ],
   "source": [
    "pprint.pprint(sys.argv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "id": "483cc27d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'/Users/collinsliu/opt/anaconda3/lib/python3.9/site-packages/ipykernel_launcher.py'\n"
     ]
    }
   ],
   "source": [
    "pprint.pprint(sys.argv[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af8d8363",
   "metadata": {},
   "source": [
    "### os\n",
    "提供访问操作系统的能力\n",
    "1. environ 显示所有环境变量\n",
    "2. system(command) 执行外部指令：execv退出当前python程序；popen建立python和新程序之间的连接\n",
    "3. startfile(x.exe) 仅限于unix系统中使用\n",
    "3. sep\n",
    "4. pathsep\n",
    "5. linesep\n",
    "6. urandom(n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "id": "74bd9ba4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'/'\n",
      "':'\n",
      "'\\n'\n",
      "environ({'__CFBundleIdentifier': 'com.apple.Terminal', 'TMPDIR': '/var/folders/zh/fmxxp3g1653ccyjmyp5z3bc00000gn/T/', 'XPC_FLAGS': '0x0', 'LaunchInstanceID': 'FBA03661-7D7A-4A1E-BF39-16F3D8611207', 'TERM': 'xterm-color', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.WbDh5brtK0/Listeners', 'SECURITYSESSIONID': '186ba', 'XPC_SERVICE_NAME': '0', 'TERM_PROGRAM': 'Apple_Terminal', 'TERM_PROGRAM_VERSION': '440', 'TERM_SESSION_ID': '9E684B2B-07AD-4BF9-B4B6-D487B59BD25F', 'SHELL': '/bin/zsh', 'HOME': '/Users/collinsliu', 'LOGNAME': 'collinsliu', 'USER': 'collinsliu', 'PATH': '/Users/collinsliu/opt/anaconda3/bin:/Users/collinsliu/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/MacGPG2/bin', 'SHLVL': '1', 'PWD': '/Users/collinsliu', 'OLDPWD': '/Users/collinsliu', 'HOMEBREW_PREFIX': '/opt/homebrew', 'HOMEBREW_CELLAR': '/opt/homebrew/Cellar', 'HOMEBREW_REPOSITORY': '/opt/homebrew', 'MANPATH': '/opt/homebrew/share/man::', 'INFOPATH': '/opt/homebrew/share/info:', 'CONDA_EXE': '/Users/collinsliu/opt/anaconda3/bin/conda', '_CE_M': '', '_CE_CONDA': '', 'CONDA_PYTHON_EXE': '/Users/collinsliu/opt/anaconda3/bin/python', 'CONDA_SHLVL': '1', 'CONDA_PREFIX': '/Users/collinsliu/opt/anaconda3', 'CONDA_DEFAULT_ENV': 'base', 'CONDA_PROMPT_MODIFIER': '(base) ', 'LC_CTYPE': 'UTF-8', '_': '/Users/collinsliu/opt/anaconda3/bin/jupyter', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', 'PYDEVD_USE_FRAME_EVAL': 'NO', 'JPY_PARENT_PID': '13436', 'CLICOLOR': '1', 'PAGER': 'cat', 'GIT_PAGER': 'cat', 'MPLBACKEND': 'module://matplotlib_inline.backend_inline'})\n"
     ]
    }
   ],
   "source": [
    "import os,pprint\n",
    "\n",
    "pprint.pprint(os.sep)\n",
    "pprint.pprint(os.pathsep)\n",
    "pprint.pprint(os.linesep)\n",
    "pprint.pprint(os.environ)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "id": "0f9f4687",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "'/Users/collinsliu/opt/anaconda3/bin:/Users/collinsliu/opt/anaconda3/condabin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/MacGPG2/bin'\n"
     ]
    }
   ],
   "source": [
    "pprint.pprint(os.environ[\"PATH\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "id": "11070a9d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 233,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import webbrowser \n",
    "\n",
    "# 使用webbrowser可以之间打开一个url\n",
    "webbrowser.open('http:/www.python.org')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79b71558",
   "metadata": {},
   "source": [
    "### fileinput\n",
    "从文件中逐行读取，然后返回一个迭代器\n",
    "1. input(inplace)\n",
    "2. filelineno 返回当前行编号\n",
    "3. nextfile() 关闭当前文件并打开下一个文件\n",
    "4. close() 关闭当前文件并终止循环"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43e4d1ef",
   "metadata": {},
   "source": [
    "### set\n",
    "1. dict是字典，底层实现是散列表\n",
    "2. list是列表，底层实现是动态数组\n",
    "3. tuple是元组，底层实现可能是数组或者是链表\n",
    "4. set是一个内置数据结构，能够直接使用而不用导入外部包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "id": "143429cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1, 2, 3, 4, 5, 6, 7, 8, 9}\n",
      "<class 'set'>\n"
     ]
    }
   ],
   "source": [
    "# 集合中元素不重复，并且是无序的\n",
    "ss = set(range(1,10,1))\n",
    "print(ss)\n",
    "print(type(ss))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1b433fb",
   "metadata": {},
   "source": [
    "1. 集合能够进行交并补等操作\n",
    "    1. 并集 union |\n",
    "    2. 交集 intersection &\n",
    "    3. 差集 difference -"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61857544",
   "metadata": {},
   "source": [
    "# 文件系统\n",
    "io是默认导入的\n",
    "## 读取文件\n",
    "1. `f = open('xxx.txt',mode=,)`\n",
    "2. 从标准输入中读取`text= sys.stdin.read()`\n",
    "3. 从文件中读取`text = f.read(length)`\n",
    "4. 文件指针的两个操作seek() tell()\n",
    "5. `with open() as f:`语句：关联一个上下文管理器对象，该对象拥有两个方法：`__enter__`以及`__exit__`\n",
    "## 读取文件的三种基本操作\n",
    "1. `read()` 最基本的读取方式\n",
    "2. `readine()` 每次返回一行，需要进行循环读取\n",
    "3. `readlines()` 将读取全部行，返回列表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "id": "eeb2f92e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "processing t\n",
      "processing h\n",
      "processing i\n",
      "processing s\n",
      "processing  \n",
      "processing i\n",
      "processing s\n",
      "processing  \n",
      "processing a\n",
      "processing  \n",
      "processing n\n",
      "processing e\n",
      "processing w\n",
      "processing  \n",
      "processing l\n",
      "processing i\n",
      "processing n\n",
      "processing e\n",
      "processing  \n",
      "processing \n",
      "\n",
      "processing a\n",
      "processing n\n",
      "processing d\n",
      "processing  \n",
      "processing t\n",
      "processing h\n",
      "processing i\n",
      "processing s\n",
      "processing  \n",
      "processing i\n",
      "processing s\n",
      "processing  \n",
      "processing a\n",
      "processing n\n",
      "processing o\n",
      "processing t\n",
      "processing h\n",
      "processing e\n",
      "processing r\n",
      "processing  \n",
      "processing n\n",
      "processing e\n",
      "processing w\n",
      "processing  \n",
      "processing l\n",
      "processing i\n",
      "processing n\n",
      "processing e\n",
      "processing  \n",
      "processing \n",
      "\n",
      "processing a\n",
      "processing n\n",
      "processing d\n",
      "processing  \n",
      "processing t\n",
      "processing h\n",
      "processing i\n",
      "processing s\n",
      "processing  \n",
      "processing t\n",
      "processing h\n",
      "processing e\n",
      "processing  \n",
      "processing t\n",
      "processing h\n",
      "processing i\n",
      "processing r\n",
      "processing d\n",
      "processing  \n",
      "processing l\n",
      "processing i\n",
      "processing n\n",
      "processing e\n",
      "processing  \n",
      "processing b\n",
      "processing a\n",
      "processing b\n",
      "processing e\n",
      "processing \n",
      "\n"
     ]
    }
   ],
   "source": [
    "import io,os\n",
    "\n",
    "def process(char):\n",
    "    print(\"processing\", char)\n",
    "    return\n",
    "\n",
    "# read()相当于是逐字符读取文件中内容\n",
    "with open('/Users/collinsliu/jupyter/python_learning_basics/text.txt','r') as f:\n",
    "    while True:\n",
    "        char = f.read(1)\n",
    "        if not char: break\n",
    "        process(char)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "id": "802cbb95",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "processing this is a new line \n",
      "\n",
      "processing and this is another new line \n",
      "\n",
      "processing and this the third line babe\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# readline()相当于逐行读取文件中内容\n",
    "with open('/Users/collinsliu/jupyter/python_learning_basics/text.txt','r') as f:\n",
    "    while True:\n",
    "        line  = f.readline()\n",
    "        if not line: break\n",
    "        process(line)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "id": "57977077",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['first line\\n', 'second line\\n', 'third line\\n']\n"
     ]
    }
   ],
   "source": [
    "with open('sometext.txt','w') as f:\n",
    "    print('first line', sep=os.linesep, file=f)\n",
    "    print('second line', sep=os.linesep, file=f)\n",
    "    print('third line', sep=os.linesep, file=f)\n",
    "    \n",
    "lines = list(open('sometext.txt'))\n",
    "pprint.pprint(lines)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83a0a3c0",
   "metadata": {},
   "source": [
    "# 测试\n",
    "## 测试四部曲\n",
    "1. 确定实现功能，然后编写一个测试\n",
    "2. 编写框架代码\n",
    "3. 编写让测试刚好通过的代码\n",
    "4. 改进代码以便准确实现功能\n",
    "\n",
    "## 单元测试组件--自动化测试\n",
    "1. doctest 通过编写`__doc__`文件完成测试的功能\n",
    "2. 在命令行中应该输入的内容是`python module.py -v`\n",
    "3. unittest "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a4686ce6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# doctest 的一个使用案例\n",
    "def square(x):\n",
    "    '''\n",
    "    return square result of an input \n",
    "    >>> square(2)\n",
    "    4\n",
    "    >>> square(3)\n",
    "    9\n",
    "    '''\n",
    "    return x * x\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    import doctest, module.py\n",
    "    doctest.testmod(module.py)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "id": "a41bd7ef",
   "metadata": {},
   "outputs": [],
   "source": [
    "# unittest测试类需要继承unittest.TestCase类，以便关联上相关的测试方法\n",
    "# unittest.main()方法能够执行相应的测试逻辑\n",
    "# /Users/collinsliu/python/datasci_test/module_text"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34700506",
   "metadata": {},
   "source": [
    "## 源代码检查\n",
    "\n",
    "## 性能分析\n",
    "\n",
    "## 交叉开发\n",
    "### Jython\n",
    "1. python运行java代码： 可以使用javac 编译`.java`文件，然后在jython中调用java对象或方法即可\n",
    "2. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cec16c4c",
   "metadata": {},
   "source": [
    "# 打包\n",
    "## 打包问题\n",
    "1. `from setuptools import setup`"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3.6",
   "language": "python",
   "name": "python3.6"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "287.391px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
